Wenn Docker nicht installiert ist, installieren Sie Docker und versuchen Sie, den Befehl zypper mit openSUSE auf dem Container zu verwenden. Kombiniert LPIC- und Docker-Lernen.
macOS Catalina (Version 10.15.7) MacBook Pro Docker version 19.03.13
Befolgen Sie die Anweisungen in Docker Official und installieren Sie sie von Docker Hub. .. Nach der Installation gab es ein Tutorial. Geben Sie den Befehl wie auf Docker Desktop angegeben ein (klicken Sie auf die Schaltfläche). Was den Inhalt betrifft, ① Erstellen Sie einen Container mit dem Namen "repo" aus dem Bild "alpine / git" und erstellen Sie einen Klon aus dem GitHub-Repository auf dem Container. ② Kopieren Sie die Dateien im Container lokal. ③ Erstellen Sie ein Image aus der Docker-Datei und nennen Sie es "docker101tutorial". ④ Geben Sie dem erstellten Bild den Namen "docker / docker101tutorial", laden Sie es auf Docker Hub hoch und geben Sie es frei.
$ docker run --name repo alpine/git clone https://github.com/docker/getting-started.git
$ docker cp repo:/git/getting-started/ .
$ cd getting-started/
$ docker build -t docker101tutorial .
$ docker tag docker101tutorial dockeridok/docker101tutorial
$ docker push dockeridok/docker101tutorial
Befehl usw. | Erläuterung |
---|---|
docker run [Möglichkeit]Bild[:Tag oder@Digest-Wert] [Befehl] [Streit...] | Erstellt eine Containerebene für das angegebene Bild und startet sie. Führt den gleichen Vorgang aus wie Docker erstellen → Docker starten. Wenn das angegebene Image lokal nicht vorhanden ist, wird es von Docker Hub heruntergeladen, sodass es möglicherweise von einer Docker-Pull-Operation begleitet wird. Diesmal das angegebene Bild alpin/Ich habe kein Git lokal, also lade ich es von Docker Hub herunter. |
--name | Geben Sie dem Container einen Namen. Diesmal habe ich es Repo genannt. Standardmäßig wird es aus einer zufälligen Zeichenfolge benannt. |
clone | Ich klone von GitHub. Da git in ENTRYPOINT angegeben ist, wird der Git-Klon tatsächlich ausgeführt. |
cp container: Pfad lokaler Pfad | Kopieren Sie den Inhalt des Dateisystems des Containers in Ihren lokalen Pfad. |
docker build [Möglichkeit]Pfad oder URL oder- | Erstellen Sie ein neues Image aus der Docker-Datei im Pfad. |
-t | Namensschild Geben Sie den Namen und die optionalen Tags im Format an. Dieses Mal wird nur der Name angegeben und das Tag weggelassen. |
docker tag [Möglichkeit]Bild[:Etikett] [Registrierungshost/][Nutzername/]Name[:Etikett] | リポジトリ内のイメージにEtikett付。今回はdocker101tutorial Zum Bilddockeridok/docker101tutorial というNameをつけている。 |
docker push [Möglichkeit]Name[:Etikett] | Sie können das Image für die Docker Hub-Registrierung oder Ihre eigene Registrierung freigeben. |
Dockerfile
Die Docker-Datei, auf der das Bild basiert. Docker liest Anweisungen aus der Docker-Datei und erstellt das Image automatisch. Dieses Mal werden wir unser Verständnis von Docker vertiefen, indem wir die einfache Docker-Datei aus dem offiziellen Website-Tutorial als Beispiel verwenden.
Dockerfile
#Basisbild
FROM node:current-slim
#RUN in Dockerfile angegeben,Geben Sie das Arbeitsverzeichnis an, wenn Sie Anweisungen wie KOPIEREN ausführen
WORKDIR /usr/src/app
#Kopieren Sie die Datei vom Host in den Container.
COPY package.json .
#Führen Sie den Befehl im Image-Dateisystem aus.
RUN npm install
#Lassen Sie den Containeranschluss los.
EXPOSE 8080
#Führen Sie den im Container angegebenen Befehl aus. CMD bietet Standardeinstellungen beim Ausführen des Containers.
CMD [ "npm", "start" ]
#Kopieren Sie alle Dateien usw. in den Container.
COPY . .
#Container löschen
Docker rm Containername
#Löschen Sie den laufenden Container.--Kraft stoppt den Behälter.
docker rm --Containername erzwingen
#Containerbestätigung
docker ps -a
#Bildlöschung
Docker rmi Bildname
#Löschen Sie alle Bilder.-Die Option q zeigt nur die ID an.
docker rmi `docker images -q`
#Bildbestätigung
docker images
#Starten Sie den Container. Aus dem Tutorial auf der offiziellen Website. Details des Befehls werden später beschrieben.
docker run --publish 8000:8080 --detach --name bb bulletinboard:1.0
#Erstellen Sie ein Bild aus einem Container
docker commit -m "message" -eine verantwortliche Person" \
Container ID hogeuser/opensuse:v2
Befehl usw. | Erläuterung |
---|---|
--publish 8000:8080 | Veröffentlichen Sie den Container-Port auf der Host-Seite. Leiten Sie den Host-Port 8000 an den Container-Port 8080 weiter. |
--detach | Führen Sie den Container im Hintergrund aus. |
docker commit [Möglichkeit]Container[Repository[:Etikett]] | Erstellen Sie ein neues Bild, das die Dateiänderungen und -einstellungen des Containers widerspiegelt. |
Nachdem ich eine Vorstellung von Docker habe, werde ich einen openSUSE-Container für das Hauptthema erstellen.
Der Name des openSUSE-Images wurde von DockerHub opensuse / leap gefunden. Sie müssen es also nur ausführen. Wenn Sie nur den Befehl überprüfen, ist er schneller als das Erstellen einer virtuellen Maschine.
% docker run -it opensuse/leap:latest
Unable to find image 'opensuse/leap:latest' locally
latest: Pulling from opensuse/leap
658f48177d00: Already exists
Digest: sha256:
Status: Downloaded newer image for opensuse/leap:latest
0a5ec012802e:/ # cat /etc/*release
NAME="openSUSE Leap"
VERSION="15.2"
ID="opensuse-leap"
ID_LIKE="suse opensuse"
VERSION_ID="15.2"
PRETTY_NAME="openSUSE Leap 15.2"
ANSI_COLOR="0;32"
CPE_NAME="cpe:/o:opensuse:leap:15.2"
BUG_REPORT_URL="https://bugs.opensuse.org"
HOME_URL="https://www.opensuse.org/"
0a5ec012802e:/ # zypper --version
zypper 1.14.38
Befehl usw. | Erläuterung |
---|---|
-i | Holen Sie sich die Standardeingabe (STDIN) des Containers. Standardeingabe ist im Container möglich. |
-t | Weisen Sie im Container ein Pseudo-Terminal zu.-Durch die Kombination mit t können Sie Befehle wie bei einem normalen Terminal eingeben (obwohl ich nicht weiß, wie viel Sie wie gewohnt tun können). |
Ich habe auch einen CentOS-Container erstellt und verwendet, aber es war ärgerlich zu sehen, dass das Gebietsschema nicht festgelegt werden kann. Stellen Sie sicher, dass $ LC_ * und $ LANG korrekt sind. Als ich also versuchte, das Gebietsschema zu ändern
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to create bus connection: Host is down
Wird angezeigt. Kann systemd nicht funktionieren, weil die Shell PID1 verwendet?
[root@15900d9cd863 /]bash# ps
PID TTY TIME CMD
1 pts/0 00:00:00 bash
162 pts/0 00:00:00 ps
Ich habe es gelöst, indem ich diesem Artikel gefolgt bin. Hyakuzo's Room "Wenn systemctl nicht mit CentOS 7-Containern verwendet werden kann"
docker run -itd --privilegiertes Bild/sbin/init
docker exec -es Container/bin/bash
[root@d7a7f918cfde /]bash# ps
PID TTY TIME CMD
119 pts/1 00:00:00 bash
15560 pts/1 00:00:00 ps
Befehl usw. | Erläuterung |
---|---|
--privileged | Geben Sie dem Container erweiterte Berechtigungen (alle Berechtigungen). Sie können eine Verbindung zu anderen Containern und zu allen Geräten auf dem Host herstellen. |
/sbin/init | Mit einem symbolischen Link zu systemd--Durch die Verwendung mit privilegierten/sbin/init works und systemctl etc. können ausgeführt werden |
docker exec [Möglichkeit]Container-Befehl[Streit...] | Führen Sie den Befehl im laufenden Container aus. Wenn Sie diesmal den Befehl im Container ausführen,/bin/Es bedeutet "Bash-Befehl"? |
Übrigens lokale Einstellung. Nach dem Einstellen sollte es in source / etc / locale.conf
wiedergegeben werden (der obige Befehl wird nicht ausgeführt, da er durch reboot
aus dem Container kam).
[root@d7a7f918cfde /]bash# localectl
System Locale: LANG=en_US.UTF-8
VC Keymap: us
X11 Layout: n/a
[root@d7a7f918cfde /]bash# localectl list-locales
C.utf8
[root@d7a7f918cfde /]bash# dnf -y install langpacks-ja
[root@d7a7f918cfde /]bash# localectl list-locales
C.utf8
ja_JP.eucjp
ja_JP.utf8
[root@d7a7f918cfde /]bash# localectl set-locale LANG=ja_JP.utf8
[root@d7a7f918cfde /]bash# localectl
System Locale: LANG=ja_JP.utf8
VC Keymap: us
X11 Layout: n/a
Ich möchte das Eingabeaufforderungsteil verständlicher machen, damit ich es einfärben kann. Referenzseite: Tohohos WWW "Einführung in Shell".
#Shell-Bestätigung
$ echo $SHELL
#Einstellungsdatei bearbeiten. Färbe es grün, um die Zeit anzuzeigen.
$ vi /etc/bashrc
export PS1="\[\e[1;32m\][\u@\h \w][\t]\[\e[0m\]\s\ $"
#Reflektieren
$ source /etc/bashrc
Als ich die Uhrzeit an der Eingabeaufforderung anzeigte, war es nicht Japan, also ändern Sie sie in Japan.
[root@f95fa15cf5fb /][13:26:29]bash#timedatectl
Local time:So 2020-11-01 13:26:37 UTC
Universal time:So 2020-11-01 13:26:37 UTC
RTC time:So 2020-11-01 13:26:37
Time zone: UTC (UTC, +0000)
System clock synchronized: no
NTP service: n/a
RTC in local TZ: no
[root@f95fa15cf5fb /][13:26:37]bash#timedatectl set-timezone Asia/Tokyo
[root@f95fa15cf5fb /][22:27:03]bash#timedatectl
Local time:So 2020-11-01 22:27:07 JST
Universal time:So 2020-11-01 13:27:07 UTC
RTC time:So 2020-11-01 13:27:07
Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: no
NTP service: n/a
RTC in local TZ: no
Dies war problematisch, da die Abschlussfunktion häufig nicht aktiviert war. Aktivieren Sie sie daher. Es ist nicht schön, aber nachdem ich den folgenden Befehl ausgeführt habe, bin ich aus dem Container ausgestiegen, habe den Container verpflichtet, ein Bild zu erstellen, und das Bild zu einem Container gemacht, um die Abschlussfunktion zu aktivieren.
[root@f95fa15cf5fb /][22:32:18]bash#yum info bash-completion
Last metadata expiration check: 1:18:Vor 08 am 01. November 2020 um 21:24:15 Uhr.
Available Packages
Name : bash-completion
Epoch : 1
Version : 2.7
Release : 5.el8
Architecture : noarch
Size : 274 k
Source : bash-completion-2.7-5.el8.src.rpm
Repository : BaseOS
Summary : Programmable completion for Bash
URL : https://github.com/scop/bash-completion
License : GPLv2+
Description : bash-completion is a collection of shell functions that take advantage
: of the programmable completion feature of bash.
[root@f95fa15cf5fb /][22:42:23]bash#yum install bash-completion
Recommended Posts