docker鏡像、容器使用、安裝部署nginx


1.docker鏡像

  這里需要用到兩條命令。

1.拉取鏡像命令 

C:\Users\Administrator>docker pull --help

Usage:  docker pull [OPTIONS] NAME[:TAG|@DIGEST]

Pull an image or a repository from a registry

Options:
  -a, --all-tags                Download all tagged images in the repository
      --disable-content-trust   Skip image verification (default true)

 

  這條命令用來從倉庫拉取鏡像

 

比如我們從docker默認倉庫拉取第一個鏡像。這個鏡像的名稱可以在docker倉庫搜索。

C:\Users\Administrator>docker pull hello-world
Using default tag: latest
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:9572f7cdcee8591948c2963463447a53466950b3fc15a247fcad1917ca215a2f
Status: Downloaded newer image for hello-world:latest

2.查看本地鏡像命令

C:\Users\Administrator>docker images --help

Usage:  docker images [OPTIONS] [REPOSITORY[:TAG]]

List images

Options:
  -a, --all             Show all images (default hides intermediate images)
      --digests         Show digests
  -f, --filter filter   Filter output based on conditions provided
      --format string   Pretty-print images using a Go template
      --no-trunc        Don't truncate output
  -q, --quiet           Only show numeric IDs

 

例如:列出本地的鏡像列表

C:\Users\Administrator>docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              fce289e99eb9        13 months ago       1.84kB

 

REPOSITORY:表示鏡像的倉庫源。鏡像名稱
TAG:鏡像的標簽
IMAGE ID:鏡像ID
CREATED:鏡像創建時間
SIZE:鏡像大小

  同一倉庫源可以有多個 TAG,代表這個倉庫源的不同個版本,如 ubuntu 倉庫源里,有 15.10、14.04 等多個不同的版本,我們使用 REPOSITORY:TAG 來定義不同的鏡像。

3.查找鏡像

C:\Users\Administrator>docker search java
NAME                                     DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
node                                     Node.js is a JavaScript-based platform for s…   8439                [OK]
tomcat                                   Apache Tomcat is an open source implementati…   2638                [OK]
openjdk                                  OpenJDK is an open-source implementation of …   2112                [OK]
java                                     Java is a concurrent, class-based, and objec…   1976                [OK]
ghost                                    Ghost is a free and open source blogging pla…   1102                [OK]
couchdb                                  CouchDB is a database that uses JSON for doc…   324                 [OK]
jetty                                    Jetty provides a Web server and javax.servle…   322                 [OK]
groovy                                   Apache Groovy is a multi-faceted language fo…   84                  [OK]
lwieske/java-8                           Oracle Java 8 Container - Full + Slim - Base…   46                                      [OK]
nimmis/java-centos                       This is docker images of CentOS 7 with diffe…   42                                      [OK]
fabric8/java-jboss-openjdk8-jdk          Fabric8 Java Base Image (JBoss, OpenJDK 8)      28                                      [OK]
frekele/java                             docker run --rm --name java frekele/java        12                                      [OK]
blacklabelops/java                       Java Base Images.                               8                                       [OK]
bitnami/java                             Bitnami Java Docker Image                       5                                       [OK]
cloudbees/java-with-docker-client        Java image with Docker client installed, use…   4                                       [OK]
rightctrl/java                           Oracle Java                                     3                                       [OK]
cfje/java-test-applications              Java Test Applications CI Image                 2
zoran/java10-sjre                        Slim Docker image based on AlpineLinux with …   2                                       [OK]

NAME: 鏡像倉庫源的名稱
DESCRIPTION: 鏡像的描述
OFFICIAL: 是否 docker 官方發布
stars: 類似 Github 里面的 star,表示點贊、喜歡的意思。
AUTOMATED: 自動構建。

4.刪除鏡像

C:\Users\Administrator>docker rmi hello-world
Error response from daemon: conflict: unable to remove repository reference "hello-world" (must force) - container fd680c09ec41 is using its referenced image fce289e99eb9

  運行中的鏡像不能刪除,需要先停止鏡像后刪除。

 

C:\Users\Administrator>docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
fd680c09ec41        hello-world         "/hello"            25 minutes ago      Exited (0) 25 minutes ago                       elegant_chaum

C:\Users\Administrator>docker rm fd680c09ec41 #刪除容器(可以加-f參數強制刪除) fd680c09ec41

C:\Users\Administrator>docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

C:\Users\Administrator>docker rmi hello-world
Untagged: hello-world:latest
Untagged: hello-world@sha256:9572f7cdcee8591948c2963463447a53466950b3fc15a247fcad1917ca215a2f
Deleted: sha256:fce289e99eb9bca977dae136fbe2a82b6b7d4c372474c9235adc1741675f587e
Deleted: sha256:af0b15c8625bb1938f1d7b17081031f649fd14e6b233688eea3c5483994a66a3

C:\Users\Administrator>docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

5.構建鏡像

  參考:https://www.cnblogs.com/qlqwjy/p/12322861.html

 

2.docker容器

  docker鏡像運行起來就是docker容器。

0.創建一個容器但是不啟動

docker create :創建一個新的容器但不啟動它。用法同docker run

語法:

docker create [OPTIONS] IMAGE [COMMAND] [ARG...]

 

1.啟動容器

運行docker鏡像需要用到docker run命令,語法如下:

C:\Users\Administrator>docker run --help

Usage:  docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

Run a command in a new container

Options:
      --add-host list                  Add a custom host-to-IP mapping
                                       (host:ip)
  -a, --attach list                    Attach to STDIN, STDOUT or STDERR
      --blkio-weight uint16            Block IO (relative weight),
                                       between 10 and 1000, or 0 to
                                       disable (default 0)
      --blkio-weight-device list       Block IO weight (relative device
                                       weight) (default [])
      --cap-add list                   Add Linux capabilities
      --cap-drop list                  Drop Linux capabilities
      --cgroup-parent string           Optional parent cgroup for the
                                       container
      --cidfile string                 Write the container ID to the file
      --cpu-period int                 Limit CPU CFS (Completely Fair
                                       Scheduler) period
      --cpu-quota int                  Limit CPU CFS (Completely Fair
                                       Scheduler) quota
      --cpu-rt-period int              Limit CPU real-time period in
                                       microseconds
      --cpu-rt-runtime int             Limit CPU real-time runtime in
                                       microseconds
  -c, --cpu-shares int                 CPU shares (relative weight)
      --cpus decimal                   Number of CPUs
      --cpuset-cpus string             CPUs in which to allow execution
                                       (0-3, 0,1)
      --cpuset-mems string             MEMs in which to allow execution
                                       (0-3, 0,1)
  -d, --detach                         Run container in background and
                                       print container ID
      --detach-keys string             Override the key sequence for
                                       detaching a container
      --device list                    Add a host device to the container
      --device-cgroup-rule list        Add a rule to the cgroup allowed
                                       devices list
      --device-read-bps list           Limit read rate (bytes per second)
                                       from a device (default [])
      --device-read-iops list          Limit read rate (IO per second)
                                       from a device (default [])
      --device-write-bps list          Limit write rate (bytes per
                                       second) to a device (default [])
      --device-write-iops list         Limit write rate (IO per second)
                                       to a device (default [])
      --disable-content-trust          Skip image verification (default true)
      --dns list                       Set custom DNS servers
      --dns-option list                Set DNS options
      --dns-search list                Set custom DNS search domains
      --entrypoint string              Overwrite the default ENTRYPOINT
                                       of the image
  -e, --env list                       Set environment variables
      --env-file list                  Read in a file of environment variables
      --expose list                    Expose a port or a range of ports
      --group-add list                 Add additional groups to join
      --health-cmd string              Command to run to check health
      --health-interval duration       Time between running the check
                                       (ms|s|m|h) (default 0s)
      --health-retries int             Consecutive failures needed to
                                       report unhealthy
      --health-start-period duration   Start period for the container to
                                       initialize before starting
                                       health-retries countdown
                                       (ms|s|m|h) (default 0s)
      --health-timeout duration        Maximum time to allow one check to
                                       run (ms|s|m|h) (default 0s)
      --help                           Print usage
  -h, --hostname string                Container host name
      --init                           Run an init inside the container
                                       that forwards signals and reaps
                                       processes
  -i, --interactive                    Keep STDIN open even if not attached
      --ip string                      IPv4 address (e.g., 172.30.100.104)
      --ip6 string                     IPv6 address (e.g., 2001:db8::33)
      --ipc string                     IPC mode to use
      --isolation string               Container isolation technology
      --kernel-memory bytes            Kernel memory limit
  -l, --label list                     Set meta data on a container
      --label-file list                Read in a line delimited file of labels
      --link list                      Add link to another container
      --link-local-ip list             Container IPv4/IPv6 link-local
                                       addresses
      --log-driver string              Logging driver for the container
      --log-opt list                   Log driver options
      --mac-address string             Container MAC address (e.g.,
                                       92:d0:c6:0a:29:33)
  -m, --memory bytes                   Memory limit
      --memory-reservation bytes       Memory soft limit
      --memory-swap bytes              Swap limit equal to memory plus
                                       swap: '-1' to enable unlimited swap
      --memory-swappiness int          Tune container memory swappiness
                                       (0 to 100) (default -1)
      --mount mount                    Attach a filesystem mount to the
                                       container
      --name string                    Assign a name to the container
      --network string                 Connect a container to a network
                                       (default "default")
      --network-alias list             Add network-scoped alias for the
                                       container
      --no-healthcheck                 Disable any container-specified
                                       HEALTHCHECK
      --oom-kill-disable               Disable OOM Killer
      --oom-score-adj int              Tune host's OOM preferences (-1000
                                       to 1000)
      --pid string                     PID namespace to use
      --pids-limit int                 Tune container pids limit (set -1
                                       for unlimited)
      --privileged                     Give extended privileges to this
                                       container
  -p, --publish list                   Publish a container's port(s) to
                                       the host
  -P, --publish-all                    Publish all exposed ports to
                                       random ports
      --read-only                      Mount the container's root
                                       filesystem as read only
      --restart string                 Restart policy to apply when a
                                       container exits (default "no")
      --rm                             Automatically remove the container
                                       when it exits
      --runtime string                 Runtime to use for this container
      --security-opt list              Security Options
      --shm-size bytes                 Size of /dev/shm
      --sig-proxy                      Proxy received signals to the
                                       process (default true)
      --stop-signal string             Signal to stop a container
                                       (default "15")
      --stop-timeout int               Timeout (in seconds) to stop a
                                       container
      --storage-opt list               Storage driver options for the
                                       container
      --sysctl map                     Sysctl options (default map[])
      --tmpfs list                     Mount a tmpfs directory
  -t, --tty                            Allocate a pseudo-TTY
      --ulimit ulimit                  Ulimit options (default [])
  -u, --user string                    Username or UID (format:
                                       <name|uid>[:<group|gid>])
      --userns string                  User namespace to use
      --uts string                     UTS namespace to use
  -v, --volume list                    Bind mount a volume
      --volume-driver string           Optional volume driver for the
                                       container
      --volumes-from list              Mount volumes from the specified
                                       container(s)
  -w, --workdir string                 Working directory inside the container

 

例如:運行上面的hello-world鏡像。

C:\Users\Administrator>docker run hello-world

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

2.查看所有啟動的容器

C:\Users\Administrator>docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
fd680c09ec41        hello-world         "/hello"            19 minutes ago      Exited (0) 19 minutes ago                       elegant_chaum

  加-a查看所有容器,包括已經停止的容器,不加-a是查看啟動的容器。

3.啟動已停止運行的容器

docker start 6f834248b43f

4.后台運行容器

C:\Users\Administrator>docker run -d hello-world
338d2e090bcc658618f8ea85dccfdfc3565ddbbd30c2a4178f6f749e153aa333

5.進入容器

  在使用 -d 參數時,容器啟動后會進入后台。此時想要進入容器,可以通過以下指令進入:

docker attach

docker exec:推薦大家使用 docker exec 命令,因為此退出容器終端,不會導致容器的停止

(1)attach 命令

docker attach 1e560fca3906

   注意: 如果從這個容器退出,會導致容器的停止。

(2)exec命令

docker exec -it 243c32535da7 /bin/bash

  -i表示交互式的,-t表示開啟一個虛擬終端。

   注意: 如果從這個容器退出,不會導致容器的停止

補充:有時候進不去容器,報錯:  starting container process caused "exec: \"/bin/bash\": stat /bin/bash: no such file or directory"

上述錯誤說沒有此類文件或目錄/bin/bash,那么使用下面的命令.

docker exec -it <containter_id | containter_name> sh

 

6.停止一個容器

語法:

docker stop <容器 ID>

7.重啟容器

停止的容器可以通過 docker restart 重啟:

docker restart <容器 ID>

8.刪除容器

C:\Users\Administrator>docker rm -f 1ef79f1c7da6
1ef79f1c7da6

 

3.執行圖如下:

docker pull:向docker守護進程(服務)發送請求,先在本機檢查鏡像是否存在,如果存在並且是你要的版本就不做操作;如果不存在從倉庫拉取鏡像保存到本地。

docker run:向docker守護進程(服務)發送請求,先在本機檢查鏡像是否存在,如果不存在執行一次docker pull操作;之后運行鏡像。

4.安裝nginx鏡像

nginx鏡像與之前的hello-world鏡像的區別:

(1)持久運行的容器

(2)前台掛起&后台運行

(3)后台運行的需要進入容器內部。

1.下載nginx鏡像 

https://c.163.com/hub#/library/search?keyword=nginx網易docker倉庫搜索nginx,如下:

 

   可以看到有兩個nginx,第一個帶的是docker的圖標,代表是從docker倉庫同步過來的鏡像。第二個是網易自己的,在這里下載docker自帶的。我們點擊第一個library/nginx

 

 復制下載地址之后docker pull,如下:

C:\Users\Administrator>docker pull hub.c.163.com/library/nginx:latest
latest: Pulling from library/nginx
5de4b4d551f8: Pull complete
d4b36a5e9443: Pull complete
0af1f0713557: Pull complete
Digest: sha256:f84932f738583e0169f94af9b2d5201be2dbacc1578de73b09a6dfaaa07801d6
Status: Downloaded newer image for hub.c.163.com/library/nginx:latest

查看本地所有鏡像:

C:\Users\Administrator>docker images
REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
hello-world                   latest              fce289e99eb9        13 months ago       1.84kB
hub.c.163.com/library/nginx   latest              46102226f2fd        2 years ago         109MB

 

2.啟動nginx

如下:這種方式啟動我們不能占用窗口,否則會停掉

C:\Users\Administrator>docker run hub.c.163.com/library/nginx

新開窗口查看容器:

C:\Users\Administrator>docker ps
CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS              PORTS               NAMES
17da2264a64c        hub.c.163.com/library/nginx   "nginx -g 'daemon of…"   49 seconds ago      Up 46 seconds       80/tcp              musing_clarke

 

3.后台啟動nginx(-d參數)

C:\Users\Administrator>docker run -d hub.c.163.com/library/nginx
29d978bb4001613e3a4777b2c8ce2b30b68b9a7ecf5a629bfb3a9e62f0b7261e

C:\Users\Administrator>docker ps -a
CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS              PORTS               NAMES
29d978bb4001        hub.c.163.com/library/nginx   "nginx -g 'daemon of…"   5 seconds ago       Up 2 seconds        80/tcp

  返回的是容器的ID。

 

如果需要進入后台運行的nginx,可以用exec。

C:\Users\Administrator>docker ps
CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS              PORTS               NAMES
29d978bb4001        hub.c.163.com/library/nginx   "nginx -g 'daemon of…"   4 minutes ago       Up 4 minutes        80/tcp              romantic_lumiere

C:\Users\Administrator>docker exec --help

Usage:  docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

Run a command in a running container

Options:
  -d, --detach               Detached mode: run command in the background
      --detach-keys string   Override the key sequence for detaching a
                             container
  -e, --env list             Set environment variables
  -i, --interactive          Keep STDIN open even if not attached
      --privileged           Give extended privileges to the command
  -t, --tty                  Allocate a pseudo-TTY
  -u, --user string          Username or UID (format:
                             <name|uid>[:<group|gid>])
  -w, --workdir string       Working directory inside the container

C:\Users\Administrator>docker exec -it 29d bash
root@29d978bb4001:/#

  注意:上面containerid只輸入了29d,因為我們本地只有一個docker容器,所以輸入簡單的也可以找到。i參數表示交互式,t表示開啟一個虛擬終端。后面的bash是執行的命令。發現進入一個虛擬的linux環境,可以執行linux命令,如下:(nginx本身就是運行在linux的服務,所以我們進入容器相當於進了一個linux系統)

root@29d978bb4001:/# ls
bin  boot  dev  etc  home  lib  lib32  lib64  libx32  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@29d978bb4001:/# which nginx
/usr/sbin/nginx

在容器內查看下容器內的進程:(發現pid為1的是nginx進程,還有nginxworker進程)

root@f402157f746c:/# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 02:26 ?        00:00:00 nginx: master process nginx -g daemon off;
nginx        6     1  0 02:26 ?        00:00:00 nginx: worker process
root         7     0  0 02:29 pts/0    00:00:00 bash
root       600     7  0 02:34 pts/0    00:00:00 ps -ef

 

 4.通過宿主機訪問docker容器nginx

1. docker網絡:

host模式:容器和宿主機共享Network namespace。也就是共享同一個IP和端口。

bridge模式:有獨立的network namespace,可以通過端口映射將端口映射到宿主機中。(默認)

none模式:容器有獨立的Network namespace,但並沒有對其進行任何網絡設置,如分配veth pair 和網橋連接,配置IP等。

如下圖:

 

 2.啟動nginx的時候進行端口映射

C:\Users\Administrator>docker ps
CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS              PORTS               NAMES
29d978bb4001        hub.c.163.com/library/nginx   "nginx -g 'daemon of…"   About an hour ago   Up 47 minutes       80/tcp              romantic_lumiere

C:\Users\Administrator>docker stop 29  #停掉上面的nginx,因為只有一個容器,所以輸入簡寫ID也可以
29

C:\Users\Administrator>docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

C:\Users\Administrator>docker images
REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
hello-world                   latest              fce289e99eb9        13 months ago       1.84kB
hub.c.163.com/library/nginx   latest              46102226f2fd        2 years ago         109MB

C:\Users\Administrator>docker run -p 8080:80 -d hub.c.163.com/library/nginx #啟動nginx,-p是端口映射,本地的8080映射到docker的80端口,80是nginx的端口。
d742f7199bb6ce10508fddcf647520f88267492b458584c81b0c789658b3f4b3

C:\Users\Administrator>docker ps
CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS              PORTS                  NAMES
d742f7199bb6        hub.c.163.com/library/nginx   "nginx -g 'daemon of…"   4 seconds ago       Up 3 seconds        0.0.0.0:8080->80/tcp   sweet_elion

C:\Users\Administrator>netstat -ano | findstr 8080
  TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING       14768
  TCP    [::]:8080              [::]:0                 LISTENING       14768

瀏覽器訪問:

注意:由於我這里是windows虛擬機訪問,因為docker是運行在Linux上的,在Windows中運行docker,實際上還是在Windows下先安裝了一個Linux環境,然后在這個系統中運行的docker。也就是說,所有的東西都是在虛擬的linux環境中,而不是我們的宿主環境Windows。所以我們也不能通過localhost直接訪問。需要先查看linux虛擬環境的IP,如下:

C:\Users\Administrator>docker-machine ls #查看可以使用的機器,可以看到目前只有這里默認的 default 虛擬機。
NAME      ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER     ERRORS
default   *        virtualbox   Running   tcp://192.168.99.100:2376           v19.03.5

C:\Users\Administrator>docker-machine ip default  #查看默認虛擬機的IP地址 192.168.99.100

訪問linux虛擬環境的IP地址:

另一種是-P(大寫的P,這種是隨機分配一個本地端口),如下:

C:\Users\Administrator>docker run -d -P hub.c.163.com/library/nginx
2eeabee88ff42f611702a6239c9689e254e2ca449f065c7bdb423304cada3a78

C:\Users\Administrator>docker ps
CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS              PORTS                   NAMES
2eeabee88ff4        hub.c.163.com/library/nginx   "nginx -g 'daemon of…"   2 seconds ago       Up 1 second         0.0.0.0:32769->80/tcp   tender_grothendieck

  訪問的時候同樣是用linux虛擬環境的IP地址訪問。 

 

補充:docker進入容器內沒有vim,ps,top支持

解決辦法:

(1)下載vim

apt-get update
apt-get install vim

(2)下載ps、top

apt-get install procps

 

補充:docker port  列出指定的容器的端口映射,或者查找將PRIVATE_PORT NAT到面向公眾的端口。

C:\Users\Administrator>docker ps -a
CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS              PORTS                   NAMES
19244d42aaf3        hub.c.163.com/library/nginx   "nginx -g 'daemon of…"   5 minutes ago       Up 5 minutes        0.0.0.0:32772->80/tcp   competent_agnesi
36c135e9890c        hub.c.163.com/library/nginx   "nginx -g 'daemon of…"   9 minutes ago       Up 9 minutes        0.0.0.0:8080->80/tcp    elastic_cerf

C:\Users\Administrator>docker port --help

Usage:  docker port CONTAINER [PRIVATE_PORT[/PROTO]]

List port mappings or a specific mapping for the container

Options:


C:\Users\Administrator>docker port 19244d42aaf3
80/tcp -> 0.0.0.0:32772

C:\Users\Administrator>docker port 36
80/tcp -> 0.0.0.0:8080

 

補充:下載和運行不同版本鏡像的時候只需要在鏡像名稱后面加上版本號就可以,比如 

C:\Users\Administrator>docker pull hub.c.163.com/library/nginx:1.9
C:\Users\Administrator>docker run hub.c.163.com/library/nginx:1.9

補充: Detached模式 vs foreground  模式

1. Detached模式 vs foreground  模式

 當要啟動一個docker容器時,首先必須決定是以detached模式在后台運行容器還是以默認的foreground模式運行。

(1)Detached (-d) detached:分離的模式  

    要在detached模式啟動一個容器,必須使用-d=true或僅-d選項。docker是這樣設計的,當運行在容器的根進程退出時,以detached模式啟動的容器也退出。以detached模式運行的容器當它停止時無法自動刪除,需要docker rm containerID 手動刪除。 (此模式不能加--rm參數)

(2)Foreground 模式:

   在forgroud模式[當-d不指定時],docker run能夠在容器啟動進程並附着控制台到進程的標准輸入,輸出和標准錯誤。此模式運行的容器當它停止時默認也無法自動刪除,需要docker rm containerID 手動刪除。如果加了 --rm 參數會自動刪除。

2.docker run --rm 解釋

官方解釋如下:

 --rm  Automatically remove the container when it exits

  執行docker run命令帶--rm命令選項,等價於在容器退出后自動移除容器,執行docker rm -v。注意,--rm選項也會清理容器的匿名data volumes。

  顯然,--rm選項不能與-d同時使用,即只能自動清理foreground容器,不能自動清理detached容器

3.測試:

(1)foreground模式,不加--rm自動停止后容易停止但不刪除

Administrator@MicroWin10-1535 MINGW64 ~/Desktop/dockertest
$ docker run ubuntu echo "hello"
hello

Administrator@MicroWin10-1535 MINGW64 ~/Desktop/dockertest
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
d4dab01786b2        ubuntu              "echo hello"        3 seconds ago       Exited (0) 3 seconds ago                       frosty_               herschel

(2)foreground模式,加--rm自動停止后容易停止且刪除容器

Administrator@MicroWin10-1535 MINGW64 ~/Desktop/dockertest
$ docker run --rm ubuntu echo "hello"
hello

Administrator@MicroWin10-1535 MINGW64 ~/Desktop/dockertest
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

Administrator@MicroWin10-1535 MINGW64 ~/Desktop/dockertest

補充:docker run --rm imagename cmd 經常用於執行一次容器內的命令並且關閉容器,如果需要獲取文件可以加-v參數指定容器內部和外部映射路徑。例如鏡像內有個sh腳本,內容如下:

#!/bin/bash
echo "this is test"

外部調用容器內命令,執行完關閉容器

C:\Users\Administrator>docker run --rm myubuntu sh /test.sh
this is test

總結:

  -d 就是以守護進程的方式啟動(detached模式);不加-d就是占用命令行的方式運行(foreground模式)。不加-d的情況(foreground)可以加 --rm 參數在停止的時候自動刪除容器。

補充:docker查看日志 

$ docker logs 8720

              RabbitMQ 3.6.11. Copyright (C) 2007-2017 Pivotal Software, Inc.
  ##  ##      Licensed under the MPL.  See http://www.rabbitmq.com/
  ##  ##
  ##########  Logs: tty
  ######  ##        tty
  ##########
              Starting broker...

=INFO REPORT==== 9-Dec-2020::13:44:08 ===
Starting RabbitMQ 3.6.11 on Erlang 19.2.1
Copyright (C) 2007-2017 Pivotal Software, Inc.
Licensed under the MPL.  See http://www.rabbitmq.com/

=INFO REPORT==== 9-Dec-2020::13:44:08 ===
node           : rabbit@my-rabbit

補充:docker命令大全

(1)容器生命周期管理
  run 創建一個新的容器並運行一個名令
  start/stop/restart 啟動/停止/重啟容器
  kill 殺掉一個運行中的容器
  rm 刪除一個或多個容器
  pause/unpause 暫停/恢復容器中的所有進程
  create 創建一個新的容器但不啟動它
  exec 進入容器
(2)容器操作
  ps 列出容器
  inspect 獲取容器/鏡像的元數據。
  top 查看容器中運行的進程信息,支持 ps 命令參數
  attach 連接到正在運行中的容器(退出時容器關閉,不建議使用)
  events 從服務器獲取實時事件
  logs 獲取容器的日志
  wait 阻塞運行直到容器停止,然后打印出它的退出代碼
  export 將文件系統作為一個tar歸檔文件導出到STDOUT
  port 列出指定的容器的端口映射,或者查找將PRIVATE_PORT NAT到面向公眾的端口
(3)容器rootfs命令
  commit 從容器創建一個新的鏡像
  cp 用於容器與主機之間的數據拷貝
  diff 檢查容器里文件結構的更改
(4)鏡像倉庫
  login 登陸到一個Docker鏡像倉庫,如果未指定鏡像倉庫地址,默認為官方倉庫 Docker Hub
  logout 登出一個Docker鏡像倉庫,如果未指定鏡像倉庫地址,默認為官方倉庫 Docker Hub
  pull 從鏡像倉庫中拉取或者更新指定鏡像
  push 將本地的鏡像上傳到鏡像倉庫,要先登陸到鏡像倉庫
  search 從Docker Hub查找鏡像
(5)本地鏡像管理
  images 列出本地鏡像
  rmi 刪除鏡像
  tag 標記本地鏡像,將其歸入某一倉庫
  build 命令用於使用 Dockerfile 創建鏡像
  history 查看指定鏡像的創建歷史
  save 將指定鏡像保存成 tar 歸檔文件
  load 導入使用 docker save 命令導出的鏡像
  import 從歸檔文件中創建鏡像
(6)info|version
  info 顯示 Docker 系統信息,包括鏡像和容器數
  version 顯示 Docker 版本信息


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM