[LINUX] Erstellen Sie eine Entwicklungsumgebung für die C-Sprache mit einem Container

Über diesen Artikel

Es ist erforderlich, verschiedene abhängige Bibliotheken in der C-Sprachentwicklungsumgebung zu installieren. Daher ist es schwierig, die Umgebung jedes Entwicklers zu vereinheitlichen. Bis jetzt, um die Umwelt zu vereinheitlichen

Ich musste so etwas tun. Aber jetzt gibt es eine bequeme Sache, die als Container bezeichnet wird. Der Autor hat auch eine Entwicklungs- und Testumgebung für AWS EC2 erstellt und Entwicklern zur Verfügung gestellt. Derzeit bieten wir Docker-Dateien und Docker-Images an. Hier erstellen wir eine Docker-Datei und ein Bild und erklären deren Verwendung.

Annahme

Eine Umgebung, in der der Docker-Container ausgeführt wird, z. B. Docker für Mac / Windows, muss installiert sein. Außerdem sind einige Kenntnisse in Docker und Linux erforderlich. Darüber hinaus beschreibt dieser Artikel den Arbeitsinhalt auf dem Mac. Wenn Sie unter Windows arbeiten, lesen Sie bitte den entsprechenden Pfad usw.

Tor

In diesem Artikel können Sie unter CentOS des Docker-Containers Folgendes ausführen:

  1. Sie können eine C-Sprachquelle mit vi schreiben
  2. C-Sprachprogramme können mit gcc und make kompiliert werden
  3. Die kompilierte ausführbare Datei kann ausgeführt werden
  4. Kompilierte ausführbare Datei kann mit gdb debuggt werden
  5. (Bonus) Java und Python können ebenfalls verwendet werden

Erstellen Sie eine Docker-Datei

Die Docker-Datei ist eine Entwurfszeichnung zum Erstellen eines Containerbilds. Bevor ich den Container verwenden konnte, musste ich das Betriebssystem und die Bibliotheken manuell installieren. Wenn Sie die Prozedur in die Docker-Datei schreiben, anstatt sie aufzuschreiben, können Sie sie problemlos reproduzieren. Dies ist genau der erste Schritt in ** Infrastruktur als Code (IaC) **.

Entscheiden Sie zuerst, wo das Bild erstellt werden soll

Entscheiden Sie zunächst, wo das Bild erstellt werden soll. Erstellen / platzieren Sie dort eine Docker-Datei.

> cd ~/docker/

Dockerfile

Die fertige Version stammt von hier (Dockerfile) Ich werde verschiedene Dinge in der Docker-Datei beschreiben.

Basisbild

Bitte wählen Sie Ihr Lieblingsbetriebssystem. Hier wird CentOS 7 als Entwicklungsumgebung ausgewählt.

From centos:7

Arbeitsverzeichnis

Geben Sie das Verzeichnis an, in dem Sie installieren möchten.

WORKDIR /root

Modulinstallation

Installieren Sie Ihr Lieblingspaket mit yum. Wenn Sie in C-Sprache entwickeln, ist die Gruppeninstallation von yum praktisch. Das Bild wird größer, aber in der Entwicklungsumgebung kein Problem.

RUN yum -y update && \
    yum -y groupinstall "Development Tools"

Andere sind frei! Hier (Dockerfile) beschreibt diejenigen, die wahrscheinlich normal verwendet werden.

Dateien in Bild importieren

Importieren Sie Dateien aus dem Dateisystem des Host-PCs in das Image.

COPY .bashrc /root/

Dieses Mal möchte ich die Umgebungsvariablen festlegen, wenn die Shell ausgeführt wird, daher habe ich dem Bild .bashrc hinzugefügt. Ich werde. Wenn Sie die Dateien haben, die Sie benötigen KOPIEREN [Datei auf dem Host-PC] [Speicherort im Docker-Image] Bitte hinzufügen mit.

Docker-Image-Erstellung

Wechseln Sie in das Verzeichnis mit der Docker-Datei (hier ~ / docker /) und erstellen Sie.

> cd ~/docker/
> docker build -t c_dev_env .

Es wird einige Zeit in Anspruch nehmen.

> docker images
REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
c_dev_env                 latest              aa8cc7f4372f        About an hour ago   1.45GB

Dies vervollständigt das Docker-Image "c_dev_env".

Referenz Um sich bei DockerHub zu registrieren (Push), muss dem Tag [Organisation] hinzugefügt werden (Option -t). docker build -t [organization]/c_dev_env .

Docker-Container-Ausführung

Dies ist der wichtigste Teil dieses Artikels. Der Befehl gdb verwendet Systemaufrufe und kann ohne die entsprechenden Optionen nicht ausgeführt werden.

docker run -it --name "my_dev_env" --cap-add=SYS_PTRACE --security-opt="seccomp=unconfined" c_dev_env /bin/bash

** Erläuterung der Optionen und Parameter **

Optionen / Parameter Erläuterung
-i (--interactive)benutze stdin
-t Aktivieren Sie tty
--name Gib einen Namen. Hier"my_dev_env"
--cap-add=SYS_PTRACE Linux Capability ptrace()Systemaufrufe zulassen.(Referenz) Manpage der Funktionen
--security-opt="seccomp=unconfined" Vermeiden Sie dies, da Systemaufrufe auch mit dem als seccomp bezeichneten Mechanismus eingeschränkt sind.(Referenz)Steuern Sie Docker-Systemaufrufe mithilfe des seccomp-Profils
Parameter 1 Bildname. Hier c_dev_Geben Sie env an
Parameter 2 Ausführungsbefehl. Hier/bin/Geben Sie bash an

-v [Host-PC-Verzeichnis]: Es ist praktisch, es in [Container-Verzeichnis] zu mounten. Sie können mit einem vertrauten Editor auf dem Host-PC entwickeln.

> docker run -it --name "my_dev_env" --cap-add=SYS_PTRACE --security-opt="seccomp=unconfined" c_dev /bin/bash
bash-4.2# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
bash-4.2#

Die Ausführungsumgebung ist jetzt abgeschlossen.

Programmerstellung & Ausführung

Jetzt erstellen wir ein einfaches Programm und führen es aus. Im Docker-Image unter / root / sample

bash-4.2# cd /root
bash-4.2# mkdir sample
bash-4.2# cd sample
bash-4.2# vi hello.c

Programmerstellung hello.c

hello.c


#include <stdio.h>

int main(void)
{
  int sum = 0;
  sum++;
  printf("Hello, World!\n");
  printf("sum = %d\n", sum );
  return 0;
}

Und kompilieren gcc -g -o hello hello.c -g: Vergiss die Debug-Optionen nicht!

bash-4.2# gcc -g -o hello hello.c
bash-4.2# ls -la
total 24
drwxr-xr-x 2 root root 4096 Jun 23 14:24 .
dr-xr-x--- 1 root root 4096 Jun 23 14:23 ..
-rwxr-xr-x 1 root root 9528 Jun 23 14:24 hello
-rw-r--r-- 1 root root  136 Jun 23 14:24 hello.c
bash-4.2# ./hello
Hello, World!
sum = 1

Ich kann es richtig machen.

debuggen

Jetzt debuggen wir mit gdb


bash-4.2# gdb hello
GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-114.el7
~ Ausgelassen ~
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /root/sample/hello...done.
(gdb) 

Die Eingabeaufforderung wurde ohne Fehler ausgegeben. Setzen Sie als nächstes einen Haltepunkt und führen Sie einen Schritt aus

(gdb) l <---Listenanzeige
1	#include <stdio.h>
2
3	int main(void)
4	{
5	  int sum = 0;
6	  sum++;
7	  printf("Hello, World!\n");
8	  printf("sum = %d\n", sum );
9	  return 0;
10	}
(gdb) b 6  <---Haltepunkteinstellung in Zeile 6
Breakpoint 1 at 0x40056c: file hello.c, line 6.
(gdb) r   <---Lauf
Starting program: /root/sample/hello

Breakpoint 1, main () at hello.c:6
6	  sum++;  <---An einem Haltepunkt angehalten!
Missing separate debuginfos, use: debuginfo-install glibc-2.17-260.el7_6.5.x86_64
(gdb) n   <---Schrittausführung
7	  printf("Hello, World!\n");
(gdb) p sum <---Variable Inhaltsanzeige
$2 = 1

Die Haltepunkteinstellung und die Schrittausführung erfolgen problemlos.

Beenden Sie den Docker-Container

Schließlich Strg + p, Strg + q, um Linux im Docker-Container zu verlassen. Wenn Sie erneut eine Verbindung herstellen, hängen Sie Docker [Tag-Name] an

> docker attach my_dev_env
bash-4.2#

Zusammenfassung

** Infrastruktur als Code (IaC) ** ist ein wesentliches technisches Element für die Erstellung umfangreicher Systemumgebungen, insbesondere in öffentlichen Clouds und Container-Orchestrierungsumgebungen. Ich war jedoch ein wenig beeindruckt, dass ich es auch in einer so vertrauten Umgebung erleben konnte. (Es ist natürlich)

--Schreiben Sie den Installationsvorgang in Dockerfile

Dies ist auch ein wichtiges Element von ** Infrastruktur als Code (IaC) **, und dies allein Toyle ( SRE Site Reliability Engineering Kapitel 5) Ich bin der Meinung, dass wir es definitiv reduzieren können. Seien Sie jedoch vorsichtig bei der Personalisierung durch Dockerfile-Handwerker und Playbook-Handwerker.

Recommended Posts

Erstellen Sie eine Entwicklungsumgebung für die C-Sprache mit einem Container
Erstellen Sie mit Laragon ganz einfach eine Entwicklungsumgebung
[Django] Erstellen Sie mit PyCharm schnell eine Entwicklungsumgebung für Django-Container (Docker)
[Python] Erstellen Sie mit Docker eine Django-Entwicklungsumgebung
Erstellen Sie mit der Doker Toolbox eine Django-Entwicklungsumgebung
Erstellen Sie eine Python-Umgebung für maschinelles Lernen mit Containern
Erstellen Sie mit Python eine Entwicklungsumgebung für maschinelles Lernen
Erstellen Sie eine Entwicklungsumgebung mit Poetry Django Docker Pycharm
Erstellen Sie mit Docker eine Django-Entwicklungsumgebung! (Docker-compose / Django / postgreSQL / nginx)
[Memo] Erstellen Sie mit Docker eine Entwicklungsumgebung für Django + Nuxt.js
Erstellen Sie eine Go-Entwicklungsumgebung mit den Remote-Containern von VS Code
Erstellen Sie mit VSCode x Remote Development x Pipenv eine komfortable Entwicklungsumgebung
Erstellen einer Entwicklungsumgebung für die Python2.7-Serie mit Vagrant
Erstellen Sie eine Tensorflow-Umgebung mit Raspberry Pi [2020]
Erstellen Sie mit Docker-Compose eine schnelle API-Umgebung
[Linux] Erstellen einer Jenkins-Umgebung mit Docker
Erstellen Sie mit pyenv eine virtuelle Umgebung für Python
Erstellen Sie mit Neovim eine moderne Python-Umgebung
[Linux] Aufbau einer Docker-Umgebung mit Amazon Linux 2
[DynamoDB] [Docker] Erstellen Sie mit Docker-Compose eine Entwicklungsumgebung für DynamoDB und Django
Erstellen Sie mit pulumi eine WardPress-Umgebung auf AWS
Erstellen Sie eine Python-Entwicklungsumgebung mit Visual Studio Code
Erstellen Sie eine Python-Umgebung mit ansible auf centos6
Erstellen Sie mit Sublime Text3 eine Python3-Build-Umgebung
Erstellen Sie mit Vagrant in 5 Minuten eine Django-Umgebung
Erstellen Sie eine Python-Entwicklungsumgebung auf Ihrem Mac
[Memo] Erstellen Sie eine virtuelle Umgebung mit Pyenv + anaconda
Erstellen Sie eine virtuelle Umgebung mit pyenv und venv
Erstellen Sie eine Kubernetes-Umgebung für die Entwicklung unter Ubuntu
Erstellen einer Python-Umgebung mit OSX Elcapitan
Erstellen Sie mit Eclipse eine Minecraft-Plug-Entwicklungsumgebung
Erstellen Sie mit IntelliJ schnell eine Python Django-Umgebung
Ich habe versucht, eine Mac Python-Entwicklungsumgebung mit pythonz + direnv zu erstellen
Erstellen Sie eine mruby-Entwicklungsumgebung für ESP32 (Linux Edition)
Erstellen Sie eine Python-Entwicklungsumgebung auf Raspberry Pi
Erstellen Sie eine Python-Ausführungsumgebung mit VS-Code
Holen Sie sich mit Poetry eine schnelle Python-Entwicklungsumgebung
Flutter in Docker - Erstellen und Verwenden einer Flutter-Entwicklungsumgebung in einem Docker-Container
Erstellen Sie eine TensorFlow-Entwicklungsumgebung auf Amazon EC2 mit Befehlskopie
Erstellen Sie eine lokale Entwicklungsumgebung mit WSL + Docker Desktop für Windows + Docker-Lambda + Python
Richten Sie eine Entwicklungsumgebung für die Verarbeitung natürlicher Sprache ein
Erstellen Sie eine GVim-basierte Python-Entwicklungsumgebung unter Windows 10 (3) GVim8.0 und Python3.6
Erstellen einer Django-Entwicklungsumgebung mit pyenv-virtualenv auf einem Mac
Erstellen Sie eine virtuelle Python-Umgebung mit virtualenv und virtualenvwrapper
Erstellen Sie eine lokale Entwicklungsumgebung für Laravel6.X auf Ihrem Mac
Reparieren einer kaputten Entwicklungsumgebung mit Mavericks-Migration (Hinweis)
Erstellen Sie mit pyenv-virtualenv eine Python-Umgebung für jedes Verzeichnis
Erstellen Sie eine Python-Entwicklungsumgebung mit Vagrant + Ansible + Fabric
Erstellen Sie eine GVim-basierte Python-Entwicklungsumgebung unter Windows 10 (1)
Ich möchte einfach eine modellbasierte Entwicklungsumgebung erstellen
Erstellen Sie eine Python-Entwicklungsumgebung unter Mac OS X.
Erstellen Sie eine virtuelle Python-Umgebung mit virtualenv und virtualenvwrapper
So erstellen Sie eine Entwicklungsumgebung für TensorFlow (1.0.0) (Mac)
Erstellen Sie eine Python-Entwicklungsumgebung mit pyenv unter MacOS
Richten Sie mit Sublime Text 2 eine Python-Entwicklungsumgebung ein
Erstellen einer Django-Umgebung für Win10 (mit virtuellem Speicherplatz)
Erstellen Sie mit Docker eine einfache Fast API-Entwicklungsumgebung
Erstellen einer numerischen Berechnungsumgebung mit pyenv und miniconda3