背景说明

解决方案

容器查看

  1. [root@vm1 etc]# docker ps
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
  3. 6bcfe0cc5da2 nginx "/docker-entrypoint.…" 8 minutes ago Up 8 minutes 0.0.0.0:8080->80/tcp, :::8080-
  4. 994aa16f4d3b nginx "/docker-entrypoint.…" 11 minutes ago Up 11 minutes 0.0.0.0:49154->80/tcp, :::4915
  5. 65961d6728c6 nginx "/docker-entrypoint.…" 30 hours ago Up 30 hours 80/tcp

如果想查看最新的容器,则使用-l参数

  1. [root@vm1 etc]# docker ps -l
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
  3. 6bcfe0cc5da2 nginx "/docker-entrypoint.…" 8 minutes ago Up 8 minutes 0.0.0.0:8080->80/tcp, :::8080->8
  4. [root@vm1 etc]#

容器强杀

  1. [root@vm1 ~]# docker kill e0a155a4e04b
  2. e0a155a4e04b

容器停止

[root@vm1 ~]# docker stop e0a155a4e04b
e0a155a4e04b

容器删除

[root@vm1 ~]# docker rm e0a155a4e04b
e0a155a4e04b

容器日志

[root@vm1 ~]# docker logs e0a155a4e04b
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2022/04/11 02:55:00 [notice] 1#1: using the "epoll" event method
2022/04/11 02:55:00 [notice] 1#1: nginx/1.21.5
2022/04/11 02:55:00 [notice] 1#1: built by gcc 10.2.1 20210110 (Debian 10.2.1-6) 
2022/04/11 02:55:00 [notice] 1#1: OS: Linux 3.10.0-957.el7.x86_64
2022/04/11 02:55:00 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 65536:65536
2022/04/11 02:55:00 [notice] 1#1: start worker processes
2022/04/11 02:55:00 [notice] 1#1: start worker process 32
2022/04/11 02:55:00 [notice] 1#1: start worker process 33
2022/04/11 02:55:00 [notice] 1#1: start worker process 34
2022/04/11 02:55:00 [notice] 1#1: start worker process 35
2022/04/11 02:55:00 [notice] 1#1: start worker process 36
2022/04/11 02:55:00 [notice] 1#1: start worker process 37
2022/04/11 02:55:00 [notice] 1#1: start worker process 38
2022/04/11 02:55:00 [notice] 1#1: start worker process 39
[root@vm1 ~]#

容器进程

[root@vm1 ~]# docker top e0a155a4e04b
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                102969              102949              0                   10:54               ?                   00:00:00            nginx: master process nginx -g daemon off;
101                 103029              102969              0                   10:54               ?                   00:00:00            nginx: worker process
101                 103030              102969              0                   10:54               ?                   00:00:00            nginx: worker process
101                 103031              102969              0                   10:54               ?                   00:00:00            nginx: worker process
101                 103032              102969              0                   10:54               ?                   00:00:00            nginx: worker process
101                 103033              102969              0                   10:54               ?                   00:00:00            nginx: worker process
101                 103034              102969              0                   10:54               ?                   00:00:00            nginx: worker process
101                 103035              102969              0                   10:54               ?                   00:00:00            nginx: worker process
101                 103036              102969              0                   10:54               ?                   00:00:00            nginx: worker process
[root@vm1 ~]#

启动命令

在启动容器时可以在启动命令后添加自定义启动命令

[root@vm1 ~]# docker run -it  nginx /bin/bash
root@7757ae052e58:/# curl localhost:80
curl: (7) Failed to connect to localhost port 80: Connection refused
root@7757ae052e58:/#

这样就替换了默认的CMD命令

如下命令场景可以用来做抓包或者测试,因为新启动一个容器和历史容器在同一个子网内

[root@vm1 ~]# docker run -it --rm nginx /bin/bash

自动启动

容器启动后,当对Docker服务进行重启[systemctl restart docker]后容器不会自动启动。
如果想Docker重启后,容器自动启动,则需要指定参数—restart=always进行设定。

自动删除

再做容器测试或项目构建编译过程中,希望当容器运行完成后自动删除则可以指定参数—rm[关闭即删除]

[root@vm1 ~]# docker run --name nginx-host --rm  -d nginx
28ad6349b505f71e202a1b438cc4e4f39b354238956f2fcf0b14149e2192a7da
[root@vm1 ~]# docker stop nginx-host

主机记录

容器在启动过程中会自动把容器IP和容器ID在容器/etc/hosts文件中进行添加

[root@vm1 ~]# docker run --name nginx-host -d nginx
28ad6349b505f71e202a1b438cc4e4f39b354238956f2fcf0b14149e2192a7da
[root@vm1 ~]# docker exec -it nginx-host /bin/bash
root@28ad6349b505:/# cat /etc/hosts       
127.0.0.1    localhost
::1    localhost ip6-localhost ip6-loopback
fe00::0    ip6-localnet
ff00::0    ip6-mcastprefix
ff02::1    ip6-allnodes
ff02::2    ip6-allrouters
172.17.0.3    28ad6349b505
root@28ad6349b505:/#

如果想添加其他容器的主机名称和IP可以通过参数—add-host进行添加

[root@vm1 ~]# docker run --name nginx-host-add --add-host nginx-web:172.17.0.250   -d nginx
e0a155a4e04b8d56d1bcf21e2acea798a527486103e06fe91f67dc4b09068029
[root@vm1 ~]# docker exec -it nginx-host-add /bin/bash 
root@e0a155a4e04b:/# cat /etc/hosts 
127.0.0.1    localhost
::1    localhost ip6-localhost ip6-loopback
fe00::0    ip6-localnet
ff00::0    ip6-mcastprefix
ff02::1    ip6-allnodes
ff02::2    ip6-allrouters
172.17.0.250    nginx-web
172.17.0.4    e0a155a4e04b
root@e0a155a4e04b:/#

主机名称

容器在启动过程中可以设定主机名称,默认情况下主机名称和容器ID保持一致

[root@vm1 ~]#  docker run --name nginx-test -d nginx
58069dd61142056e0d05aefa7cef03ae288e675d987f9f9a2eb2207bd137d410
[root@vm1 ~]# docker exec -it nginx-test /bin/bash
root@58069dd61142:/# hostname
58069dd61142
root@58069dd61142:/#

通过-h选项指定主机名称

[root@vm1 ~]#  docker run  -h nginx-test-hostname --name nginx-test-hostname  -d nginx
2b0abba9c6bee638fb3028475c276b56ff87d91bf6bdf302bc878d1df0ffaf7c
[root@vm1 ~]# docker ps |grep nginx
2b0abba9c6be   nginx          "/docker-entrypoint.…"   9 seconds ago        Up 7 seconds        80/tcp                                                                                                                nginx-test-hostname
58069dd61142   nginx          "/docker-entrypoint.…"   About a minute ago   Up About a minute   80/tcp                                                                                                                nginx-test
[root@vm1 ~]# docker exec -it nginx-test-hostname /bin/bash
root@nginx-test-hostname:/# hostname
nginx-test-hostname
root@nginx-test-hostname:/#

有些组件应用在启动时会把主机名称当做节点名称,这时候就需要在启动时指定主机名称

环境变量

https://hub.docker.com/_/mysql
image.png
这里运行mysql镜像时可以通过-e参数指定环境变量

docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

-e是—env的简写