容器操作基础命令
1. 启动容器用法
docker run [选项] [镜像名] [shell命令] [参数]
#选项:
-i, --interactive Keep STDIN open even if not attached,通常和-t一起使用
-t, --tty 分配pseudo-TTY,通常和-i一起使用,注意对应的容器必须运行shell才支持进入
-d, --detach Run container in background and print container ID,台后运行,默认前台
--name string Assign a name to the container
--h, --hostname string Container host name
--rm Automatically remove the container when it exits
-p, --publish list Publish a container's port(s) to the host
-P, --publish-all Publish all exposed ports to random ports
--dns list Set custom DNS servers
--entrypoint string Overwrite the default ENTRYPOINT of the image
--restart policy
--privileged Give extended privileges to container
-e, --env=[] Set environment variables
--env-file=[] Read in a line delimited file of environment variables
注意: 容器启动后,如果容器内没有前台运行的进程,将自动退出停止
# 指定容器名称
[root@Ubuntu2204 ~]#docker run --name web1 nginx
# 运行交互式容器并退出
[root@Ubuntu2204 ~]#docker run -it --name web2 nginx bash
root@35a32e21d4a3:/# exit
exit
同时按三个键ctrl+p+q退出后容器不会停止
# 开机自动运行容器
[root@Ubuntu2204 ~]#docker run -d --name nginx --restart=always nginx
[root@Ubuntu2204 ~]#reboot
2. 显示当前存在容器
docker ps [OPTIONS]
docker container ls [OPTIONS]
Options:
-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
3. 查看容器内的进程
docker top CONTAINER [ps OPTIONS]
4. 查看容器资源使用情况
docker stats [OPTIONS] [CONTAINER...]
Display a live stream of container(s) resource usage statistics
Options:
-a, --all Show all containers (default shows just running)
--format string Pretty-print images using a Go template
--no-stream Disable streaming stats and only pull the first result
--no-trunc Do not truncate output
5. 查看容器的详细信息
# docker inspect 可以查看docker各种对象的详细信息,包括:镜像,容器,网络等
docker inspect [OPTIONS] NAME|ID [NAME|ID...]
Options:
-f, --format string Format the output using the given Go template
-s, --size Display total file sizes if the type is container
6. 删除容器
# docker rm 可以删除容器,即使容器正在运行当中,也可以被强制删除掉
docker rm [OPTIONS] CONTAINER [CONTAINER...]
docker container rm [OPTIONS] CONTAINER [CONTAINER...]
#选项:
-f, --force Force the removal of a running container (uses SIGKILL)
-v, --volumes Remove the volumes associated with the container
#删除停止的容器
docker container prune [OPTIONS]
Options:
--filter filter Provide filter values (e.g. 'until=<timestamp>')
-f, --force Do not prompt for confirmation
# 删除所有容器
docker rm -f `docker ps -a -q`
docker ps -a -q | xargs docker rm -f
7. 容器的启动和停止
docker start|stop|restart|pause|unpause 容器ID
# 批量正常启动或关闭所有容器
docker start $(docker ps -a -q)
docker stop $(docker ps -a -q)
8. 给正在运行的容器发信号
# docker kill 可以给容器发信号,默认号SIGKILL,即9信号
docker kill [OPTIONS] CONTAINER [CONTAINER...]
#选项:
-s, --signal string Signal to send to the container (default "KILL")
9. 进入正在运行的容器
使用exec命令,在运行中的容器启动新进程,可以执行单次命令,以及进入容器 测试环境使用此方式,使用exit退出,但容器还在运行,此为推荐方式
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
常用选项:
-d, --detach Detached mode: run command in the background
-e, --env list Set environment variables
-i, --interactive Keep STDIN open even if not attached
-t, --tty Allocate a pseudo-TTY
#常见用法
docker exec -it 容器ID sh|bash
[root@Ubuntu2204 ~]#docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fcd4687e3ba6 nginx "/docker-entrypoint.…" 19 minutes ago Up 18 minutes 80/tcp nginx2
15baf2043597 nginx "/docker-entrypoint.…" 30 minutes ago Up 7 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp nginx
[root@Ubuntu2204 ~]#docker exec -it fcd4687e3ba6 bash
root@fcd4687e3ba6:/# exit
exit
[root@Ubuntu2204 ~]#docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fcd4687e3ba6 nginx "/docker-entrypoint.…" 19 minutes ago Up 19 minutes 80/tcp nginx2
15baf2043597 nginx "/docker-entrypoint.…" 31 minutes ago Up 7 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp nginx
10. 暴露所有容器端口
容器启动后,默认处于预定义的NAT网络中,所以外部网络的主机无法直接访问容器中网络服务 docker run -P 可以将事先容器预定义的所有端口映射宿主机的网卡的随机端口,默认从32768开始 使用随机端口 时,当停止容器后再启动可能会导致端口发生变化
-P , --publish-all= true | false默认为false
#示例:
docker run -P docker.io/nginx #映射容器所有暴露端口至随机本地端口
# docker port 可以查看容器的端口映射关系
docker port CONTAINER [PRIVATE_PORT[/PROTO]]
11. 指定端口映射
docker run -p 可以将容器的预定义的指定端口映射到宿主机的相应端口
注意: 多个容器映射到宿主机的端口不能冲突,但容器内使用的端口可以相同
# 容器80端口映射到宿主机本地端口81
docker run -p 81:80 --name nginx nginx
12. 查看容器的日志
# docker logs 可以查看容器中运行的进程在控制台输出的日志信息
docker logs [OPTIONS] CONTAINER
选项:
--details Show extra details provided to logs
-f, --follow Follow log output
--since string Show logs since timestamp (e.g. 2013-01-02T13:23:37) or relative (e.g. 42m for 42 minutes)
--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:37) or relative (e.g. 42m for 42 minutes)
13. 传递运行命令
容器需要有一个前台运行的进程才能保持容器的运行,通过传递运行参数是一种方式,另外也可以在构 建镜像的时候指定容器启动时运行的前台命令
容器里的PID为1的守护进程的实现方式
- 服务类: 如: Nginx,Tomcat,Apache ,但服务不能停
- 命令类: 如: tail -f /etc/hosts ,主要用于测试环境,注意: 不要tail -f <服务访问日志> 会产生不 必要的磁盘IO
14. 容器内部的hosts文件
容器会自动将容器的ID加入自已的/etc/hosts文件中,并解析成容器的IP
15. 指定容器DNS
容器的dns服务器,默认采用宿主机的dns 地址,可以用下面方式指定其它的DNS地址
- 将dns地址配置在宿主机
- 在容器启动时加选项 --dns=x.x.x.x
- 在/etc/docker/daemon.json 文件中指定
16. 容器内和宿主机之间复制文件
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
Options:
-a, --archive Archive mode (copy all uid/gid information)
-L, --follow-link Always follow symbol link in SRC_PATH
17. 传递环境变量
有些容器运行时,需要传递变量,可以使用 -e <参数> 或 --env-file <参数文件> 实现
变量参考链接: https://hub.docker.com/_/mysql