容器相关命令
[root@ubuntu2204 ~]#docker containerUsage: docker container COMMANDManage containersCommands: attach Attach local standard input, output, and error streams to a running container commit Create a new image from a container’s changes cp Copy files/folders between a container and the local filesystem create Create a new container diff Inspect changes to files or directories on a container’s filesystem exec Run a command in a running container export Export a container’s filesystem as a tar archive inspect Display detailed information on one or more containers kill Kill one or more running containers logs Fetch the logs of a container ls List containers pause Pause all processes within one or more containers port List port mappings or a specific mapping for the container prune Remove all stopped containers rename Rename a container restart Restart one or more containers rm Remove one or more containers run Run a command in a new container start Start one or more stopped containers stats Display a live stream of container(s) resource usage statistics stop Stop one or more running containers top Display the running processes of a container unpause Unpause all processes within one or more containers update Update configuration of one or more containers wait Block until one or more containers stop, then print their exit codesRun ‘docker container COMMAND –help’ for more information on a command.
启动并创建容器
docker run = docker create + docker start
复制镜像,生成容器,启动容器,进入容器,并随机生成容器ID和名称
案例:
[root@ubuntu2204 ~]#docker run hello-worldHello 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 bashShare 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/[root@ubuntu2204 ~]#docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEnginx latest 1403e55ab369 2 weeks ago 142MBalpine latest 49176f190c7e 6 weeks ago 7.05MBhello-world latest feb5d9fea6a5 15 months ago 13.3kB[root@ubuntu2204 ~]#docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES0cb0b10c2af5 hello-world “/hello” 2 minutes ago Exited (0) 2 minutes ago angry_wing
案例:一次性运行容器中命令
[root@ubuntu2204 ~]#docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEnginx latest 1403e55ab369 2 weeks ago 142MBalpine latest 49176f190c7e 6 weeks ago 7.05MBhello-world latest feb5d9fea6a5 15 months ago 13.3kB[root@ubuntu2204 ~]#docker run alpine:latest echo “Hello moore”Hello moore[root@ubuntu2204 ~]#docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES[root@ubuntu2204 ~]#docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES2a03b18ac322 alpine:latest “echo ‘Hello moore'” 18 seconds ago Exited (0) 17 seconds ago condescending_cray0cb0b10c2af5 hello-world “/hello” 12 minutes ago Exited (0) 12 minutes ago angry_wing
案例:运行交互式容器并退出
[root@ubuntu2204 ~]#docker run -it alpine:latest sh/ # echo ‘5+10’5+10/ # exit[root@ubuntu2204 ~]#docker ps -lCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESab636bf080db alpine:latest “sh” 50 seconds ago Exited (0) 16 seconds ago brave_lampor
案例:创建容器后直接进入并退出
[root@ubuntu2204 ~]#docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEnginx latest 1403e55ab369 2 weeks ago 142MBalpine latest 49176f190c7e 6 weeks ago 7.05MBhello-world latest feb5d9fea6a5 15 months ago 13.3kB[root@ubuntu2204 ~]#docker run -it –name alpine01 49176f190c7e/ # cat /etc/issue Welcome to Alpine Linux 3.17Kernel r on an m (l)/ # hostname5ff509ad4bee/ # exit#退出容器,容器也停止运行[root@ubuntu2204 ~]#docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES5ff509ad4bee 49176f190c7e “/bin/sh” 2 minutes ago Exited (0) About a minute ago alpine01b3b92cb5c280 49176f190c7e “–name alpine01” 2 minutes ago Created loving_driscoll
案例:启动后台守护式容器
[root@ubuntu2204 ~]#docker run -d –name wbe01 nginx:latest693a57848829cd69fa2f4e7badc6dfa3bffe314f1e840e13c61b23e361cd6310[root@ubuntu2204 ~]#docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES693a57848829 nginx:latest “/docker-entrypoint.…” 6 seconds ago Up 5 seconds 80/tcp wbe01[root@ubuntu2204 ~]#docker inspect 693a57848829… “Networks”: { “bridge”: { “IPAMConfig”: null, “Links”: null, “Aliases”: null, “NetworkID”: “a8a51592423bd31babd55d1e0538a833d55f279d025178fad9a96352e8752bb5”, “EndpointID”: “00819f54d38a220042272cd94e1ffb48efb8a6c7bae085d397219a700aa8be7d”, “Gateway”: “172.17.0.1”, “IPAddress”: “172.17.0.2”, –> 容器ip “IPPrefixLen”: 16, “IPv6Gateway”: “”, “GlobalIPv6Address”: “”, “GlobalIPv6PrefixLen”: 0, “MacAddress”: “02:42:ac:11:00:02”, “DriverOpts”: null }[root@ubuntu2204 ~]#docker run –rm –name b1 busybox wget -qO – 172.17.0.2Welcome to nginx!html { color-scheme: light dark; }body { width: 35em; margin: 0 auto;font-family: Tahoma, Verdana, Arial, sans-serif; }Welcome to nginx!If you see this page, the nginx web server is successfully installed andworking. Further configuration is required.For online documentation and support please refer tonginx.org.Commercial support is available atnginx.com.Thank you for using nginx.
案例:开机自动运行容器
[root@ubuntu2204 ~]#docker run -d –name web02 –restart=always -p 80:80 nginx672a7868f06f91559d4564148e7cae5f910cf80af57b330da566ad105c106f42[root@ubuntu2204 ~]#docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES672a7868f06f nginx “/docker-entrypoint.…” 7 seconds ago Up 6 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp web02693a57848829 nginx:latest “/docker-entrypoint.…” 8 minutes ago Up 8 minutes 80/tcp wbe01[root@ubuntu2204 ~]#reboot[root@ubuntu2204 ~]#Connection closing…Socket close….[root@ubuntu2204 ~]#docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES672a7868f06f nginx “/docker-entrypoint.…” 3 minutes ago Up 49 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp web02
案例:启动容器并使其持续运行
[root@ubuntu2204 ~]#docker pull ubuntuUsing default tag: latestlatest: Pulling from library/ubuntu6e3729cf69e0: Pull complete Digest: sha256:27cb6e6ccef575a4698b66f5de06c7ecd61589132d5a91d098f7f3f9285415a9Status: Downloaded newer image for ubuntu:latestdocker.io/library/ubuntu:latest[root@ubuntu2204 ~]#docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEbusybox latest 827365c7baf1 13 days ago 4.86MBnginx latest 1403e55ab369 2 weeks ago 142MBubuntu latest 6b7dfa7e8fdb 3 weeks ago 77.8MBalpine latest 49176f190c7e 6 weeks ago 7.05MBhello-world latest feb5d9fea6a5 15 months ago 13.3kB[root@ubuntu2204 ~]#docker run -it –name ubuntu01 ubunturoot@9e8ec41bd92c:/# pwd/root@9e8ec41bd92c:/# lsbin boot dev etc home lib lib32 lib64 libx32 media mnt opt proc root run sbin srv sys tmp usr var#容器内部的文件存放实质上在宿主机root@9e8ec41bd92c:/# touch mooreyxia.txtroot@9e8ec41bd92c:/# while true; do date +%T >> mooreyxia.txt ;sleep 1;done#宿主机查看容器内生成的文件[root@ubuntu2204 ~]#docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES9e8ec41bd92c ubuntu “bash” 52 seconds ago Up 50 seconds ubuntu01672a7868f06f nginx “/docker-entrypoint.…” 13 minutes ago Up 10 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp web02[root@ubuntu2204 ~]#docker inspect ubuntu01|grep UpperDir “UpperDir”: “/data/docker/overlay2/bf3e849d2a130fc959cfb4dff4ece3271b994aa853d42772cc158e9d32758a6e/diff”,[root@ubuntu2204 ~]#ls /data/docker/overlay2/bf3e849d2a130fc959cfb4dff4ece3271b994aa853d42772cc158e9d32758a6e/diffmooreyxia.txt[root@ubuntu2204 ~]#tail /data/docker/overlay2/bf3e849d2a130fc959cfb4dff4ece3271b994aa853d42772cc158e9d32758a6e/diff/mooreyxia.txt 07:47:5707:47:5807:47:5907:48:0007:48:0107:48:0307:48:0407:48:0507:48:0607:48:07
注意:容器启动后,如果容器内没有前台运行的进程,将自动退出停止
查看容器信息
案例:显示当前存在容器
[root@ubuntu2204 ~]#docker ps –helpUsage: docker ps [OPTIONS]List containersOptions: -a, –all Show all containers (default shows just running) -f, –filter filter Filter output based on conditions provided –format string Pretty-print containers using a Go template -n, –last int Show n last created containers (includes all states) (default -1) -l, –latest Show the latest created container (includes all states) –no-trunc Don’t truncate output -q, –quiet Only display container IDs -s, –size Display total file sizes#显示全部容器[root@ubuntu2204 ~]#docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES9e8ec41bd92c ubuntu “bash” 18 minutes ago Up 9 minutes ubuntu01672a7868f06f nginx “/docker-entrypoint.…” 31 minutes ago Up 28 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp web02693a57848829 nginx:latest “/docker-entrypoint.…” 39 minutes ago Exited (255) 28 minutes ago 80/tcp wbe01#查看退出状态的容器[root@ubuntu2204 ~]#docker ps -f ‘status=exited’CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES693a57848829 nginx:latest “/docker-entrypoint.…” 42 minutes ago Exited (255) 30 minutes ago 80/tcp wbe01
案例:查看容器内的进程
[root@ubuntu2204 ~]#docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES9e8ec41bd92c ubuntu “bash” 16 minutes ago Up 6 minutes ubuntu01672a7868f06f nginx “/docker-entrypoint.…” 28 minutes ago Up 25 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp web02[root@ubuntu2204 ~]#docker top web02UID PID PPID C STIME TTY TIME CMDroot 1140 1117 0 15:34 ? 00:00:00 nginx: master process nginx -g daemon off;systemd+ 1201 1140 0 15:34 ? 00:00:00 nginx: worker processsystemd+ 1202 1140 0 15:34 ? 00:00:00 nginx: worker process
案例:查看容器资源使用情况
[root@ubuntu2204 ~]#docker stats web02 > web02_status.txt^C[root@ubuntu2204 ~]#cat web02_status.txt CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS672a7868f06f web02 0.01% 7.117MiB / 1.896GiB 0.37% 1.6kB / 0B 21MB / 8.19kB 3CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS672a7868f06f web02 0.01% 7.117MiB / 1.896GiB 0.37% 1.6kB / 0B 21MB / 8.19kB 3CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS672a7868f06f web02 0.00% 7.117MiB / 1.896GiB 0.37% 1.6kB / 0B 21MB / 8.19kB 3CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS672a7868f06f web02 0.00% 7.117MiB / 1.896GiB 0.37% 1.6kB / 0B 21MB / 8.19kB 3CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS672a7868f06f web02 0.00% 7.117MiB / 1.896GiB 0.37% 1.6kB / 0B 21MB / 8.19kB 3CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS672a7868f06f web02 0.00% 7.117MiB / 1.896GiB 0.37% 1.6kB / 0B 21MB / 8.19kB 3CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS672a7868f06f web02 0.00% 7.117MiB / 1.896GiB 0.37% 1.6kB / 0B 21MB / 8.19kB 3CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS672a7868f06f web02 0.00% 7.117MiB / 1.896GiB 0.37% 1.6kB / 0B 21MB / 8.19kB 3CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS672a7868f06f web02 0.00% 7.117MiB / 1.896GiB 0.37% 1.6kB / 0B 21MB / 8.19kB 3CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS672a7868f06f web02 0.00% 7.117MiB / 1.896GiB 0.37% 1.6kB / 0B 21MB / 8.19kB 3CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS672a7868f06f web02 0.00% 7.117MiB / 1.896GiB 0.37% 1.6kB / 0B 21MB / 8.19kB 3CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS672a7868f06f web02 0.00% 7.117MiB / 1.896GiB 0.37% 1.6kB / 0B 21MB / 8.19kB 3
案例:查看容器的详细信息
[root@ubuntu2204 ~]#docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES9e8ec41bd92c ubuntu “bash” 26 minutes ago Up 17 minutes ubuntu01672a7868f06f nginx “/docker-entrypoint.…” 39 minutes ago Up 36 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp web02693a57848829 nginx:latest “/docker-entrypoint.…” 48 minutes ago Exited (255) 36 minutes ago 80/tcp wbe01[root@ubuntu2204 ~]#docker inspect 672[ { “Id”: “672a7868f06f91559d4564148e7cae5f910cf80af57b330da566ad105c106f42”, “Created”: “2023-01-05T07:32:10.723015257Z”, “Path”: “/docker-entrypoint.sh”, “Args”: [ “nginx”, “-g”, “daemon off;” ], “State”: { “Status”: “running”, “Running”: true, “Paused”: false, “Restarting”: false, “OOMKilled”: false, “Dead”: false, “Pid”: 1140, “ExitCode”: 0, “Error”: “”, “StartedAt”: “2023-01-05T07:34:44.297847995Z”, “FinishedAt”: “2023-01-05T15:34:42.627871814+08:00” }, “Image”: “sha256:1403e55ab369cd1c8039c34e6b4d47ca40bbde39c371254c7cba14756f472f52”, “ResolvConfPath”: “/data/docker/containers/672a7868f06f91559d4564148e7cae5f910cf80af57b330da566ad105c106f42/resolv.conf”, “HostnamePath”: “/data/docker/containers/672a7868f06f91559d4564148e7cae5f910cf80af57b330da566ad105c106f42/hostname”, “HostsPath”: “/data/docker/containers/672a7868f06f91559d4564148e7cae5f910cf80af57b330da566ad105c106f42/hosts”, “LogPath”: “/data/docker/containers/672a7868f06f91559d4564148e7cae5f910cf80af57b330da566ad105c106f42/672a7868f06f91559d4564148e7cae5f910cf80af57b330da566ad105c106f42-json.log”, “Name”: “/web02”, “RestartCount”: 0, “Driver”: “overlay2”, “Platform”: “linux”, “MountLabel”: “”, “ProcessLabel”: “”, “AppArmorProfile”: “docker-default”, “ExecIDs”: null, “HostConfig”: { “Binds”: null, “ContainerIDFile”: “”, “LogConfig”: { “Type”: “json-file”, “Config”: { “max-file”: “2”, “max-size”: “300m” } }, “NetworkMode”: “default”, “PortBindings”: { “80/tcp”: [ { “HostIp”: “”, “HostPort”: “80” } ] }, “RestartPolicy”: { “Name”: “always”, “MaximumRetryCount”: 0 }, “AutoRemove”: false, “VolumeDriver”: “”, “VolumesFrom”: null, “CapAdd”: null, “CapDrop”: null, “CgroupnsMode”: “private”, “Dns”: [], “DnsOptions”: [], “DnsSearch”: [], “ExtraHosts”: null, “GroupAdd”: null, “IpcMode”: “private”, “Cgroup”: “”, “Links”: null, “OomScoreAdj”: 0, “PidMode”: “”, “Privileged”: false, “PublishAllPorts”: false, “ReadonlyRootfs”: false, “SecurityOpt”: null, “UTSMode”: “”, “UsernsMode”: “”, “ShmSize”: 67108864, “Runtime”: “runc”, “ConsoleSize”: [ 0, 0 ], “Isolation”: “”, “CpuShares”: 0, “Memory”: 0, “NanoCpus”: 0, “CgroupParent”: “”, “BlkioWeight”: 0, “BlkioWeightDevice”: [], “BlkioDeviceReadBps”: null, “BlkioDeviceWriteBps”: null, “BlkioDeviceReadIOps”: null, “BlkioDeviceWriteIOps”: null, “CpuPeriod”: 0, “CpuQuota”: 0, “CpuRealtimePeriod”: 0, “CpuRealtimeRuntime”: 0, “CpusetCpus”: “”, “CpusetMems”: “”, “Devices”: [], “DeviceCgroupRules”: null, “DeviceRequests”: null, “KernelMemory”: 0, “KernelMemoryTCP”: 0, “MemoryReservation”: 0, “MemorySwap”: 0, “MemorySwappiness”: null, “OomKillDisable”: null, “PidsLimit”: null, “Ulimits”: null, “CpuCount”: 0, “CpuPercent”: 0, “IOMaximumIOps”: 0, “IOMaximumBandwidth”: 0, “MaskedPaths”: [ “/proc/asound”, “/proc/acpi”, “/proc/kcore”, “/proc/keys”, “/proc/latency_stats”, “/proc/timer_list”, “/proc/timer_stats”, “/proc/sched_debug”, “/proc/scsi”, “/sys/firmware” ], “ReadonlyPaths”: [ “/proc/bus”, “/proc/fs”, “/proc/irq”, “/proc/sys”, “/proc/sysrq-trigger” ] }, “GraphDriver”: { “Data”: { “LowerDir”: “/data/docker/overlay2/e4aa5141a37f74d4a25a6fc62b976a9cb3b4cae226b563e6d2763672be57a9e2-init/diff:/data/docker/overlay2/25ebf3757e65a5d01803e27214304288689844af5d247da930eda9314f73e4af/diff:/data/docker/overlay2/d1bfc2060ff074bfc29d071897f5f0fbd53d08eb65aa4ebc0254c605d1d8e7e1/diff:/data/docker/overlay2/aded9ef9c146c1aa21183dd21f8949125b489dc31b1b943ec278b4f5986e5319/diff:/data/docker/overlay2/e894eaf5b71767c6956f09c20768ea81a65e9c1477d5a08821d634fe58a888c8/diff:/data/docker/overlay2/f7ad75e3645a7d6b9c77c35a547c6bf421170d206d006674873427eab92c392e/diff:/data/docker/overlay2/0812214ceaaa259893a78e3df52e3e787594d92d676ef3c1c3ce9a4f9453b705/diff”, “MergedDir”: “/data/docker/overlay2/e4aa5141a37f74d4a25a6fc62b976a9cb3b4cae226b563e6d2763672be57a9e2/merged”, “UpperDir”: “/data/docker/overlay2/e4aa5141a37f74d4a25a6fc62b976a9cb3b4cae226b563e6d2763672be57a9e2/diff”, “WorkDir”: “/data/docker/overlay2/e4aa5141a37f74d4a25a6fc62b976a9cb3b4cae226b563e6d2763672be57a9e2/work” }, “Name”: “overlay2” }, “Mounts”: [], “Config”: { “Hostname”: “672a7868f06f”, “Domainname”: “”, “User”: “”, “AttachStdin”: false, “AttachStdout”: false, “AttachStderr”: false, “ExposedPorts”: { “80/tcp”: {} }, “Tty”: false, “OpenStdin”: false, “StdinOnce”: false, “Env”: [ “PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin”, “NGINX_VERSION=1.23.3”, “NJS_VERSION=0.7.9”, “PKG_RELEASE=1~bullseye” ], “Cmd”: [ “nginx”, “-g”, “daemon off;” ], “Image”: “nginx”, “Volumes”: null, “WorkingDir”: “”, “Entrypoint”: [ “/docker-entrypoint.sh” ], “OnBuild”: null, “Labels”: { “maintainer”: “NGINX Docker Maintainers ” }, “StopSignal”: “SIGQUIT” }, “NetworkSettings”: { “Bridge”: “”, “SandboxID”: “fa69dc2f2e74ad7dc54a270aa808403835ab02be2f7b58cd97154a3d0127c179”, “HairpinMode”: false, “LinkLocalIPv6Address”: “”, “LinkLocalIPv6PrefixLen”: 0, “Ports”: { “80/tcp”: [ { “HostIp”: “0.0.0.0”, “HostPort”: “80” }, { “HostIp”: “::”, “HostPort”: “80” } ] }, “SandboxKey”: “/var/run/docker/netns/fa69dc2f2e74”, “SecondaryIPAddresses”: null, “SecondaryIPv6Addresses”: null, “EndpointID”: “21e23a3a
7028a7f588563e4b13eb98424b0f475f5608ea1df1781c83acdca658”, “Gateway”: “172.17.0.1”, “GlobalIPv6Address”: “”, “GlobalIPv6PrefixLen”: 0, “IPAddress”: “172.17.0.2”, “IPPrefixLen”: 16, “IPv6Gateway”: “”, “MacAddress”: “02:42:ac:11:00:02”, “Networks”: { “bridge”: { “IPAMConfig”: null, “Links”: null, “Aliases”: null, “NetworkID”: “0e25eb364b81a8636738882ca0bab228d3d98d44fd59c49914752543594dfedf”, “EndpointID”: “21e23a3a7028a7f588563e4b13eb98424b0f475f5608ea1df1781c83acdca658”, “Gateway”: “172.17.0.1”, “IPAddress”: “172.17.0.2”, “IPPrefixLen”: 16, “IPv6Gateway”: “”, “GlobalIPv6Address”: “”, “GlobalIPv6PrefixLen”: 0, “MacAddress”: “02:42:ac:11:00:02”, “DriverOpts”: null } } } }]
删除容器
案例:删除指定状态的容器
[root@ubuntu2204 ~]#docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES9e8ec41bd92c ubuntu “bash” 30 minutes ago Up 20 minutes ubuntu01672a7868f06f nginx “/docker-entrypoint.…” 42 minutes ago Up 40 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp web02693a57848829 nginx:latest “/docker-entrypoint.…” 51 minutes ago Exited (255) 40 minutes ago 80/tcp wbe01[root@ubuntu2204 ~]#docker rm `docker ps -qf status=exited`693a57848829[root@ubuntu2204 ~]#docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES9e8ec41bd92c ubuntu “bash” 31 minutes ago Up 21 minutes ubuntu01672a7868f06f nginx “/docker-entrypoint.…” 43 minutes ago Up 40 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp web02
案例:清理全部容器 – 慎用
[root@ubuntu2204 ~]#docker rm -f `docker ps -qa`653687662f0f045dd528e93b5ff509ad4beeb3b92cb5c2800da8a6de10caab636bf080db2a03b18ac3220cb0b10c2af5[root@ubuntu2204 ~]#docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
进入正在运行的容器
案例:
[root@ubuntu2204 ~]#docker exec -it web02 bashroot@672a7868f06f:/# pwd/root@672a7868f06f:/# lsbin boot dev docker-entrypoint.d docker-entrypoint.sh etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var root@672a7868f06f:/# cat /etc/nginx/nginx.conf user nginx;worker_processes auto;error_log /var/log/nginx/error.log notice;pid /var/run/nginx.pid;events { worker_connections 1024;}http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main ‘$remote_addr – $remote_user [$time_local] “$request” ‘ ‘$status $body_bytes_sent “$http_referer” ‘ ‘”$http_user_agent” “$http_x_forwarded_for”‘; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; include /etc/nginx/conf.d/*.conf;}#exec的方式 exit退出容器也不会停止root@672a7868f06f:/# exitexit[root@ubuntu2204 ~]#docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES9e8ec41bd92c ubuntu “bash” 39 minutes ago Up 30 minutes ubuntu01672a7868f06f nginx “/docker-entrypoint.…” 52 minutes ago Up 49 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp web02
Docker端口暴露实现跨宿主机访问
容器启动后,默认处于预定义的NAT网络中,所以外部网络的主机无法直接访问容器中网络服务docker run -P 可以将事先容器预定义的所有端口映射宿主机的网卡的随机端口,默认从32768开始使用随机端口 时,当停止容器后再启动可能会导致端口发生变化
案例:容器跨宿主机访问
#创建nginx容器并运行[root@ubuntu2204 ~]#docker run -d -p 8080:80 –name web01 nginx 99b824abe4cb4779a16058401600b3e1676a18d74070742b3220019f7b14ffaf[root@ubuntu2204 ~]#docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES99b824abe4cb nginx “/docker-entrypoint.…” 8 seconds ago Up 7 seconds 0.0.0.0:8080->80/tcp, :::8080->80/tcp web019e8ec41bd92c ubuntu “bash” About an hour ago Up 55 minutes ubuntu01672a7868f06f nginx “/docker-entrypoint.…” About an hour ago Up About an hour 0.0.0.0:80->80/tcp, :::80->80/tcp web02#观察宿主机,发现生成新的网卡[root@ubuntu2204 ~]#ip a1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever2: eth0: mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:0c:29:df:99:92 brd ff:ff:ff:ff:ff:ff altname enp2s1 altname ens33 inet 10.0.0.200/24 brd 10.0.0.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fedf:9992/64 scope link valid_lft forever preferred_lft forever3: docker0: mtu 1500 qdisc noqueue state UP group default link/ether 02:42:06:86:b5:d5 brd ff:ff:ff:ff:ff:ff inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0 valid_lft forever preferred_lft forever inet6 fe80::42:6ff:fe86:b5d5/64 scope link valid_lft forever preferred_lft forever5: veth4fb03da@if4: mtu 1500 qdisc noqueue master docker0 state UP group default link/ether d6:c3:aa:57:7b:50 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet6 fe80::d4c3:aaff:fe57:7b50/64 scope link valid_lft forever preferred_lft forever9: veth64ce510@if8: mtu 1500 qdisc noqueue master docker0 state UP group default link/ether 0a:7a:11:2b:d1:ee brd ff:ff:ff:ff:ff:ff link-netnsid 1 inet6 fe80::87a:11ff:fe2b:d1ee/64 scope link valid_lft forever preferred_lft forever11: veth1f9e256@if10: mtu 1500 qdisc noqueue master docker0 state UP group default –> 新出现的网卡 link/ether d6:27:ba:37:a3:0a brd ff:ff:ff:ff:ff:ff link-netnsid 2 inet6 fe80::d427:baff:fe37:a30a/64 scope link valid_lft forever preferred_lft forever
#实验中途观察结果就是只要多一个正在运行的容器就多一张网卡,配合容器的IP成对使用,配置如下
w说明默认容器网络只支持宿主机内部网络通讯【宿主机或其他容器】,而不支持跨宿主机。
#宿主机内部容器互相访问#web02[root@ubuntu2204 ~]#docker exec -it web02 bashroot@672a7868f06f:/# hostname -I172.17.0.2 root@672a7868f06f:/# cat /usr/share/nginx/html/index.html Welcome to nginx!html { color-scheme: light dark; }body { width: 35em; margin: 0 auto;font-family: Tahoma, Verdana, Arial, sans-serif; }Welcome to nginx!If you see this page, the nginx web server is successfully installed andworking. Further configuration is required.For online documentation and support please refer tonginx.org.Commercial support is available atnginx.com.Thank you for using nginx.root@672a7868f06f:/# echo docker-nginx-web02 > /usr/share/nginx/html/index.html root@672a7868f06f:/# exitexit#web01[root@ubuntu2204 ~]#docker exec -it web01 bashroot@99b824abe4cb:/# hostname -I172.17.0.4 root@99b824abe4cb:/# apt update;apt install curlGet:1 http://deb.debian.org/debian bullseye InRelease [116 kB]Get:2 http://deb.debian.org/debian-security bullseye-security InRelease [48.4 kB]Get:3 http://deb.debian.org/debian bullseye-updates InRelease [44.1 kB]Get:4 http://deb.debian.org/debian bullseye/main amd64 Packages [8183 kB] Get:5 http://deb.debian.org/debian-security bullseye-security/main amd64 Packages [210 kB] Get:6 http://deb.debian.org/debian bullseye-updates/main amd64 Packages [14.6 kB] Fetched 8616 kB in 2min 57s (48.6 kB/s) Reading package lists… DoneBuilding dependency tree… DoneReading state information… DoneAll packages are up to date.Reading package lists… DoneBuilding dependency tree… DoneReading state information… Donecurl is already the newest version (7.74.0-1.3+deb11u3).0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.root@99b824abe4cb:/# curl 172.17.0.2docker-nginx-web02#也可以访问外部网络root@99b824abe4cb:/# curl www.xxx.comxxx
由于是宿主机内部网络通信,可以看作一个局域网,使外网能访问内网docker就需要做DNAT端口映射
DNAT docker_IP:端口 —> 宿主机_IP:端口
*注意: 多个容器映射到宿主机的端口不能冲突,但容器内使用的端口可以相同
#默认的容器网络规则[root@ubuntu2204 ~]#iptables -S…-A DOCKER -d 172.17.0.2/32 ! -i docker0 -o docker0 -p tcp -m tcp –dport 80 -j ACCEPT-A DOCKER -d 172.17.0.4/32 ! -i docker0 -o docker0 -p tcp -m tcp –dport 80 -j ACCEPT…#使用docker自带的映射选项可以省去iptables的操作,添加DNAT端口映射,使用P会绑定到宿主机的随机端口,这里我们p指定端口*注意: 多个容器映射到宿主机的端口不能冲突,但容器内使用的端口可以相同#web01 映射到宿主机8080端口[root@ubuntu2204 ~]#docker run -d -p 8080:80 –name web01 nginx #web02 映射到宿主机80端口[root@ubuntu2204 ~]#docker run -d -p 80:80 –name web02 nginx #端口转换规则[root@ubuntu2204 ~]#docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES99b824abe4cb nginx “/docker-entrypoint.…” 41 minutes ago Up 41 minutes 0.0.0.0:8080->80/tcp, :::8080->80/tcp web019e8ec41bd92c ubuntu “bash” 2 hours ago Up 2 hours ubuntu01672a7868f06f nginx “/docker-entrypoint.…” 2 hours ago Up 2 hours 0.0.0.0:80->80/tcp, :::80->80/tcp web02[root@ubuntu2204 ~]#docker port web0180/tcp -> 0.0.0.0:808080/tcp -> :::8080[root@ubuntu2204 ~]#docker port web0280/tcp -> 0.0.0.0:8080/tcp -> :::80[root@ubuntu2204 ~]#iptables -vnL -t natChain PREROUTING (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 4 224 DOCKER all — * * 0.0.0.0/0 0.0.0.0/0 ADDRTYPE match dst-type LOCALChain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 DOCKER all — * * 0.0.0.0/0 !127.0.0.0/8 ADDRTYPE match dst-type LOCALChain POSTROUTING (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 6 358 MASQUERADE all — * !docker0 172.17.0.0/16 0.0.0.0/0 0 0 MASQUERADE tcp — * * 172.17.0.2 172.17.0.2 tcp dpt:80 0 0 MASQUERADE tcp — * * 172.17.0.4 172.17.0.4 tcp dpt:80Chain DOCKER (2 references) pkts bytes target prot opt in out source destination 0 0 RETURN all — docker0 * 0.0.0.0/0 0.0.0.0/0 1 60 DNAT tcp — !docker0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 to:172.17.0.2:80 1 60 DNAT tcp — !docker0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:8080 to:172.17.0.4:80[root@ubuntu2204 ~]#ss -nltpState Recv-Q Send-Q Local Address:Port Peer Address:Port Process … LISTEN 0 4096 [::]:8080 [::]:* users:((“docker-proxy”,pid=2409,fd=4)) LISTEN 0 4096 [::]:80 [::]:* users:((“docker-proxy”,pid=1100,fd=4)) #测试跨宿主机访问内部docker服务[root@ubuntu2204 ~]#curl 10.0.0.200:8080docker-nginx-web01[root@ubuntu2204 ~]#curl 10.0.0.200:80docker-nginx-web02
案例:修改已经创建的容器的端口映射关系
[root@ubuntu2204 ~]#docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES99b824abe4cb nginx “/docker-entrypoint.…” 2 hours ago Up 2 hours 0.0.0.0:8080->80/tcp, :::8080->80/tcp web019e8ec41bd92c ubuntu “bash” 3 hours ago Up 3 hours ubuntu01672a7868f06f nginx “/docker-entrypoint.…” 4 hours ago Up 4 hours 0.0.0.0:80->80/tcp, :::80->80/tcp web02[root@ubuntu2204 ~]#docker port web0180/tcp -> 0.0.0.0:808080/tcp -> :::8080[root@ubuntu2204 ~]#ll /data/docker/containers/99b824abe4cb4779a16058401600b3e1676a18d74070742b3220019f7b14ffaf/总用量 44drwx–x— 4 root root 4096 1月 5 16:49 ./drwx–x— 5 root root 4096 1月 5 16:49 ../-rw-r—– 1 root root 2470 1月 5 17:32 99b824abe4cb4779a16058401600b3e1676a18d74070742b3220019f7b14ffaf-json.logdrwx—— 2 root root 4096 1月 5 16:49 checkpoints/-rw——- 1 root root 2906 1月 5 16:49 config.v2.json-rw-r–r– 1 root root 1548 1月 5 16:49 hostconfig.json-rw-r–r– 1 root root 13 1月 5 16:49 hostname-rw-r–r– 1 root root 174 1月 5 16:49 hostsdrwx–x— 2 root root 4096 1月 5 16:49 mounts/-rw-r–r– 1 root root 824 1月 5 16:49 resolv.conf-rw-r–r– 1 root root 71 1月 5 16:49 resolv.conf.hash[root@ubuntu2204 ~]#systemctl stop dockerWarning: Stopping docker.service, but it can still be activated by: docker.socket[root@ubuntu2204 ~]#cd /data/docker/containers/99b824abe4cb4779a16058401600b3e1676a18d74070742b3220019f7b14ffaf/[root@ubuntu2204 99b824abe4cb4779a16058401600b3e1676a18d74070742b3220019f7b14ffaf]#vim hostconfig.json #PortBindings后80/tcp对应的是容器内部的80端口,HostPort对应的是映射到宿主机的端口8080 修改此处为8090[root@ubuntu2204 99b824abe4cb4779a16058401600b3e1676a18d74070742b3220019f7b14ffaf]#cat hostconfig.json “PortBindings”:{“80/tcp”:[{“HostIp”:””,”HostPort”:”8090″}]}[root@ubuntu2204 ~]#systemctl restart docker.service[root@ubuntu2204 ~]#docker restart web01web01[root@ubuntu2204 ~]#docker port web0180/tcp -> 0.0.0.0:809080/tcp -> :::8090#测试[root@ubuntu2204 ~]#curl 10.0.0.200:8090docker-nginx-web01
查看容器的日志
案例:查看nginx服务访问日志 – 记录的是容器内部信息
[root@ubuntu2204 ~]#docker logs –helpUsage: docker logs [OPTIONS] CONTAINERFetch the logs of a containerOptions: –details Show extra details provided to logs -f, –follow Follow log output –since string Show logs since timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m for 42 minutes) -n, –tail string Number of lines to show from the end of the logs (default “all”) -t, –timestamps Show timestamps –until string Show logs before a timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m for 42 minutes)[root@ubuntu2204 ~]#docker logs web01/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration….#跟踪实时变化[root@ubuntu2204 ~]#curl 10.0.0.200:8090docker-nginx-web01[root@ubuntu2204 ~]#docker logs -f web0110.0.0.202 – – [05/Jan/2023:11:24:32 +0000] “GET / HTTP/1.1” 200 19 “-” “curl/7.81.0” “-“#容器的日志实际上利用的是宿主机的标准输出重定向[root@ubuntu2204 ~]#docker inspect web01|grep MergedDir “MergedDir”: “/data/docker/overlay2/240e12aaba372423a74dff3eb30f9f0fb9570add8620bb8557390c9423b847ff/merged”,[root@ubuntu2204 ~]#ls /data/docker/overlay2/240e12aaba372423a74dff3eb30f9f0fb9570add8620bb8557390c9423b847ff/merged/[root@ubuntu2204 ~]#ll /data/docker/overlay2/240e12aaba372423a74dff3eb30f9f0fb9570add8620bb8557390c9423b847ff/merged/var/log/nginx/总用量 8drwxr-xr-x 2 root root 4096 12月 21 19:28 ./drwxr-xr-x 1 root root 4096 12月 21 19:28 ../lrwxrwxrwx 1 root root 11 12月 21 19:28 access.log -> /dev/stdoutlrwxrwxrwx 1 root root 11 12月 21 19:28 error.log -> /dev/stderr
注意:
当log中没有记录docker运行错误,比如设置错误导致docker跑不起来,日志服务跑不起来,就用inspect去查看
搭配使用 logs 和 inspect
容器内部的hosts文件
容器会自动将容器的ID加入自已的/etc/hosts文件中,并解析成容器的IP
[root@ubuntu2204 ~]#docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES99b824abe4cb nginx “/docker-entrypoint.…” 3 hours ago Up 15 minutes 0.0.0.0:8090->80/tcp, :::8090->80/tcp web01[root@ubuntu2204 ~]#docker exec -it web01 bashroot@99b824abe4cb:/# hostname -I172.17.0.4 root@99b824abe4cb:/# cat /etc/hosts127.0.0.1 localhost::1 localhost ip6-localhost ip6-loopbackfe00::0 ip6-localnetff00::0 ip6-mcastprefixff02::1 ip6-allnodesff02::2 ip6-allrouters172.17.0.4 99b824abe4cbroot@99b824abe4cb:/# hostname 99b824abe4cb –> container ID
案例:在宿主机修改容器的域名
[root@ubuntu2204 ~]#docker run -d –add-host web03:172.17.0.10 –name alpine01 alpine tail -f /etc/hostsa599c84e3641d1b2a3da716fc7d5aa5192ca39fe506017bb668115683adb28d1[root@ubuntu2204 ~]#docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESa599c84e3641 alpine “tail -f /etc/hosts” 6 seconds ago Up 5 seconds alpine0199b824abe4cb nginx “/docker-entrypoint.…” 3 hours ago Up 23 minutes 0.0.0.0:8090->80/tcp, :::8090->80/tcp web019e8ec41bd92c ubuntu “bash” 4 hours ago Up 4 hours ubuntu01672a7868f06f nginx “/docker-entrypoint.…” 4 hours ago Up 4 hours 0.0.0.0:80->80/tcp, :::80->80/tcp web02[root@ubuntu2204 ~]#docker exec -it alpine01 sh/ # cat /etc/hosts127.0.0.1 localhost::1 localhost ip6-localhost ip6-loopbackfe00::0 ip6-localnetff00::0 ip6-mcastprefixff02::1 ip6-allnodesff02::2 ip6-allrouters172.17.0.10 web03172.17.0.5 a599c84e3641/ #
指定容器DNS
容器的dns服务器,默认采用宿主机的dns 地址,可以用下面方式指定其它的DNS地址
将dns地址配置在宿主机
在容器启动时加选项 –dns=x.x.x.x
在/etc/docker/daemon.json 文件中指定
容器的DNS默认从宿主机的DNS获取
#容器默认DNS[root@ubuntu2204 ~]#docker exec -it web01 bashroot@99b824abe4cb:/# cat /etc/resolv.conf # This is /run/systemd/resolve/resolv.conf managed by man:systemd-resolved(8).# Do not edit.## This file might be symlinked as /etc/resolv.conf. If you’re looking at# /etc/resolv.conf and seeing this text, you have followed the symlink.## This is a dynamic resolv.conf file for connecting local clients directly to# all known uplink DNS servers. This file lists all configured search domains.## Third party programs should typically not access this file directly, but only# through the symlink at /etc/resolv.conf. To manage man:resolv.conf(5) in a# different way, replace this symlink by a static file or a different symlink.## See man:systemd-resolved.service(8) for details about the supported modes of# operation for /etc/resolv.conf.nameserver 180.76.76.76nameserver 223.6.6.6search mooreyxia.org mooreyxia.com#查看宿主机DNS[root@ubuntu2204 ~]#cat /etc/resolv.conf # This is /run/systemd/resolve/stub-resolv.conf managed by man:systemd-resolved(8).# Do not edit.## This file might be symlinked as /etc/resolv.conf. If you’re looking at# /etc/resolv.conf and seeing this text, you have followed the symlink.## This is a dynamic resolv.conf file for connecting local clients to the# internal DNS stub resolver of systemd-resolved. This file lists all# configured search domains.## Run “resolvectl status” to see details about the uplink DNS servers# currently in use.## Third party programs should typically not access this file directly, but only# through the symlink at /etc/resolv.conf. To manage man:resolv.conf(5) in a# different way, replace this symlink by a static file or a different symlink.## See man:systemd-resolved.service(8) for details about the supported modes of# operation for /etc/resolv.conf.nameserver 127.0.0.53options edns0 trust-adsearch mooreyxia.org mooreyxia.com[root@ubuntu2204 ~]#resolvectl statusGlobal Protocols: -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupportedresolv.conf mode: stubLink 2 (eth0) Current Scopes: DNS Protocols: +DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupportedCurrent DNS Server: 180.76.76.76 DNS Servers: 180.76.76.76 223.6.6.6 DNS Domain: mooreyxia.com mooreyxia.orgLink 3 (docker0)Current Scopes: none Protocols: -DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
案例:指定容器DNS地址
[root@ubuntu2204 /]#docker run -it –rm –name a1 –dns 1.1.1.1 –dns 8.8.8.8 alpine sh/ # cat /etc/resolv.conf search mooreyxia.org mooreyxia.comnameserver 1.1.1.1nameserver 8.8.8.8
案例:指定domain名
[root@ubuntu2204 /]#docker run -it –rm –dns 1.1.1.1 –dns 8.8.8.8 –dns-search a.com –dns-search b.com busybox sh/ # cat /etc/resolv.conf search a.com b.comnameserver 1.1.1.1nameserver 8.8.8.8
案例:配置文件指定DNS和搜索domain名
[root@ubuntu2204 /]#vim /etc/docker/daemon.json [root@ubuntu2204 /]#cat /etc/docker/daemon.json {“registry-mirrors”: [“https://registry.docker-cn.com”,”http://hub-mirror.c.163.com”,”https://docker.mirrors.ustc.edu.cn”],”graph”: “/data/docker”,”graph”: “/data/docker”, “max-concurrent-downloads”: 10,”max-concurrent-uploads”: 5,”log-opts”: {“max-size”: “300m”,”max-file”: “2”},”live-restore”: true,”dns” : [ “114.114.114.114”, “119.29.29.29”], –> 在这里指定”dns-search”: [ “mooreyxia.com”, “mooreyxia.org”] –> 在这里指定}[root@ubuntu2204 /]#systemctl restart docker[root@ubuntu2204 /]#docker run -it –rm busybox sh/ # cat /etc/resolv.conf search mooreyxia.com mooreyxia.orgnameserver 114.114.114.114nameserver 119.29.29.29/ #
容器内和宿主机之间复制文件
案例:
[root@ubuntu2204 /]#docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES99b824abe4cb nginx “/docker-entrypoint.…” 5 hours ago Up 3 hours 0.0.0.0:8090->80/tcp, :::8090->80/tcp web019e8ec41bd92c ubuntu “bash” 6 hours ago Up 6 hours ubuntu01672a7868f06f nginx “/docker-entrypoint.…” 6 hours ago Up 6 hours 0.0.0.0:80->80/tcp, :::80->80/tcp web02#将容器内文件复制到宿主机[root@ubuntu2204 /]#docker cp -a 9e8ec41bd92c:/etc/os-release .[root@ubuntu2204 /]#cat os-release PRETTY_NAME=”Ubuntu 22.04.1 LTS”NAME=”Ubuntu”VERSION_ID=”22.04″VERSION=”22.04.1 LTS (Jammy Jellyfish)”VERSION_CODENAME=jammyID=ubuntuID_LIKE=debianHOME_URL=”https://www.ubuntu.com/”SUPPORT_URL=”https://help.ubuntu.com/”BUG_REPORT_URL=”https://bugs.launchpad.net/ubuntu/”PRIVACY_POLICY_URL=”https://www.ubuntu.com/legal/terms-and-policies/privacy-policy”UBUNTU_CODENAME=jammy#将宿主机文件复制到容器内[root@ubuntu2204 /]#docker cp /root/install_docker.sh 9e8ec41bd92c:/root/root@9e8ec41bd92c:/# cd /root/root@9e8ec41bd92c:~# lltotal 28drwx—— 1 root root 4096 Jan 5 14:03 ./drwxr-xr-x 1 root root 4096 Jan 5 14:03 ../-rw——- 1 root root 108 Jan 5 07:57 .bash_history-rw-r–r– 1 root root 3106 Oct 15 2021 .bashrc-rw-r–r– 1 root root 161 Jul 9 2019 .profile-rw-r–r– 1 root root 4445 Dec 29 15:08 install_docker.sh
使用 systemd 控制容器运行
[root@ubuntu2204 ~]#vim /lib/systemd/system/hello.service[root@ubuntu2204 ~]#cat /lib/systemd/system/hello.service[Unit]Description=Hello WorldAfter=docker.serviceRequires=docker.service[Service]TimeoutStartSec=0ExecStartPre=-/usr/bin/docker kill busybox-helloExecStartPre=-/usr/bin/docker rm busybox-helloExecStartPre=/usr/bin/docker pull busyboxExecStart=/usr/bin/docker run –name busybox-hello busybox /bin/sh -c “while true; do echo Hello World; sleep 1; done”ExecStop=/usr/bin/docker kill busybox-hello[Install]WantedBy=multi-user.target[root@ubuntu2204 ~]#systemctl daemon-reload[root@ubuntu2204 ~]#systemctl enable –now hello.service[root@ubuntu2204 ~]#systemctl status hello.service● hello.service – Hello World Loaded: loaded (/lib/systemd/system/hello.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2023-01-05 22:11:18 CST; 26s ago Process: 29145 ExecStartPre=/usr/bin/docker kill busybox-hello (code=exited, status=1/FAILURE) Process: 29152 ExecStartPre=/usr/bin/docker rm busybox-hello (code=exited, status=1/FAILURE) Process: 29158 ExecStartPre=/usr/bin/docker pull busybox (code=exited, status=0/SUCCESS) Main PID: 29182 (docker) Tasks: 7 (limit: 2196) Memory: 17.5M CPU: 223ms CGroup: /system.slice/hello.service └─29182 /usr/bin/docker run –name busybox-hello busybox /bin/sh -c “while true; do echo Hello World; sleep 1; done”1月 05 22:11:35 ubuntu2204.wang.org docker[29182]: Hello World1月 05 22:11:36 ubuntu2204.wang.org docker[29182]: Hello World1月 05 22:11:37 ubuntu2204.wang.org docker[29182]: Hello World1月 05 22:11:38 ubuntu2204.wang.org docker[29182]: Hello World1月 05 22:11:39 ubuntu2204.wang.org docker[29182]: Hello World1月 05 22:11:40 ubuntu2204.wang.org docker[29182]: Hello World1月 05 22:11:41 ubuntu2204.wang.org docker[29182]: Hello World1月 05 22:11:42 ubuntu2204.wang.org docker[29182]: Hello World1月 05 22:11:43 ubuntu2204.wang.org docker[29182]: Hello World1月 05 22:11:44 ubuntu2204.wang.org docker[29182]: Hello World[root@ubuntu2204 ~]#docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES854f520cdf92 busybox “/bin/sh -c ‘while t…” 54 seconds ago Up 53 seconds busybox-hello[root@ubuntu2204 ~]#systemctl stop hello.service[root@ubuntu2204 ~]#systemctl status hello.service× hello.service – Hello World Loaded: loaded (/lib/systemd/system/hello.service; enabled; vendor preset: enabled) Active: failed (Result: exit-code) since Thu 2023-01-05 22:13:01 CST; 3s ago Process: 29145 ExecStartPre=/usr/bin/docker kill busybox-hello (code=exited, status=1/FAILURE) Process: 29152 ExecStartPre=/usr/bin/docker rm busybox-hello (code=exited, status=1/FAILURE) Process: 29158 ExecStartPre=/usr/bin/docker pull busybox (code=exited, status=0/SUCCESS) Process: 29182 ExecStart=/usr/bin/docker run –name busybox-hello busybox /bin/sh -c while true; do echo Hello World; sleep 1; done (code=exited, status=137) Process: 29386 ExecStop=/usr/bin/docker kill busybox-hello (code=exited, status=0/SUCCESS) Main PID: 29182 (code=exited, status=137) CPU: 294ms1月 05 22:12:56 ubuntu2204.wang.org docker[29182]: Hello World1月 05 22:12:57 ubuntu2204.wang.org docker[29182]: Hello World1月 05 22:12:58 ubuntu2204.wang.org docker[29182]: Hello World1月 05 22:12:59 ubuntu2204.wang.org docker[29182]: Hello World1月 05 22:13:00 ubuntu2204.wang.org docker[29182]: Hello World1月 05 22:13:00 ubuntu2204.wang.org systemd[1]: Stopping Hello World…1月 05 22:13:01 ubuntu2204.wang.org docker[29386]: busybox-hello1月 05 22:13:01 ubuntu2204.wang.org systemd[1]: hello.service: Main process exited, code=exited, status=137/n/a1月 05 22:13:01 ubuntu2204.wang.org systemd[1]: hello.service: Failed with result ‘exit-code’.1月 05 22:13:01 ubuntu2204.wang.org systemd[1]: Stopped Hello World.
传递环境变量
案例:
[root@ubuntu2204 ~]#docker run -e ‘P1=moore’ -e ‘PDATE=2023-01-05’ –name b1 busybox envPATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/binHOSTNAME=ca41f601d231P1=moorePDATE=2023-01-05HOME=/root#数据路创建[root@ubuntu2204 ~]#docker run –restart always -d –name mysql01 mysql:5.7.32Unable to find image ‘mysql:5.7.32’ locally5.7.32: Pulling from library/mysqla076a628af6f: Downloading f6c208f3f991: Download complete 88a9455a9165: Download complete 406c9b8427c6: Download complete 7c88599c0b25: Download complete 25b5c6debdaf: Download complete 43a5816f1617: Download complete 7065aaa2655f: Download complete b4bc531db40f: Download complete 8c3e9d7c9815: Download complete fadfb9734ed2: Download complete 5.7.32: Pulling from library/mysqla076a628af6f: Pull complete f6c208f3f991: Pull complete 88a9455a9165: Pull complete 406c9b8427c6: Pull complete 7c88599c0b25: Pull complete 25b5c6debdaf: Pull complete 43a5816f1617: Pull complete 7065aaa2655f: Pull complete b4bc531db40f: Pull complete 8c3e9d7c9815: Pull complete fadfb9734ed2: Pull complete Digest: sha256:e08834258fcc0efd01df358222333919df53d4a0d9b2a54da05b204b822e3b7bStatus: Downloaded newer image for mysql:5.7.32cc666443d2d1c8d3ec355f4e3205e827eed43c6bff009dccb59c1d71f777c8bc[root@ubuntu2204 ~]#docker run –name mysql-test1 -v /data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=wordpress -e MYSQL_USER=wpuser -e MYSQL_PASSWORD=123456 -d -p 3306:3306 mysql:5.7.32991ffb59f755834d3be70709b625f0c4763ed420ee5e72e7ee8f47797de1cc97[root@ubuntu2204 ~]#docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES991ffb59f755 mysql:5.7.32 “docker-entrypoint.s…” 7 minutes ago Up 7 minutes 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql-test1cc666443d2d1 mysql:5.7.32 “docker-entrypoint.s…” 11 minutes ago Restarting (1) 51 seconds ago mysql0199b824abe4cb nginx “/docker-entrypoint.…” 7 hours ago Up 4 hours 0.0.0.0:8090->80/tcp, :::8090->80/tcp web019e8ec41bd92c ubuntu “bash” 8 hours ago Up 7 hours ubuntu01672a7868f06f nginx “/docker-entrypoint.…” 8 hours ago Up 8 hours 0.0.0.0:80->80/tcp, :::80->80/tcp web02#变量也可以加入文件,批量创建用这个参数 –env-file=xxxx
我是moore,大家一起加油!!!文章来源于互联网:46-Docker-Container容器管理各种操作Welcome to nginx!Welcome to nginx!