Appearance
常用的命令
对于镜像的所有操作命令,可以使用 docker image --help
查看
docker 命令一图总览
pull 拉取镜像
用法:docker image pull [OPTIONS] NAME[:TAG|@DIGEST]
别名:docker pull
- 先去软件市场搜镜像:https://registry.hub.docker.com/
- 选择想要下载的镜像
docker pull xxx
- 启动镜像
docker run xxx
比如搜索nginx,他有很多版本,在 tags 标签中找到自己所需的版本进行拉取即可
nginx:latest
代表最新的版本
alpine
表示内存比较小的版本,下载镜像的时候尽量使用
bash
docker pull nginx
# 等于
docker pull nginx:latest
create 创建容器
用法:docker container create [OPTIONS] IMAGE [COMMAND] [ARG...]
别名:docker create
从指定的镜像创建一个新容器,而不启动。
docker create
命令与 docker run
命令共享其大部分 options。
在 docker run
之前会先执行 create
bash
docker pull redis
docker create redis
images 列出所有镜像
用法:docker image ls [OPTIONS] [REPOSITORY[:TAG]]
别名:docker imgae list
、 docker images
通过 pull 下载后的镜像,可以使用 images 命令进行查看所有已下载的镜像
bash
docker images
常用的 options
-a,--all
显示所有 images-q, --quiet
仅显示 images ID
如果想显示所有 images 的 ID,可以使用 -aq
bash
docker images -aq
run 运行容器
用法:docker container run [OPTIONS] IMAGE [COMMAND] [ARG...]
别名:docker run
bash
docker run nginx
这种方法属于前台启动
想要后台启动,可以使用参数 -d
,打印容器id,这样可以进行其他操作
docker run -d === docker create + docker start
常用的 options
-d, --detach
在后台运行容器并打印容器ID-i
以交互模式运行容器,通常与-t
同时使用-t
为容器重新分配一个伪输入终端,通常与-i
同时使用-e, --env
设置环境变量--name
指定容器名称-p, --publish
将容器的端口发布到主机将容器的80端口绑定到主机的8080端口
bashdocker run -d -p 8080:80 nginx # port1:port2 # port1必须是唯一的
-P, --publish-all
将所有公开的端口发布到随机端口-m
设置容器使用内存最大值--restart
指定重启策略,可以写--restart=awlays
总是故障重启-v, --volume
(存储) 绑定一个卷。一般格式 主机文件或文件夹:虚拟机文件或文件夹--net
(网络) 指定容器的网络连接类型,支持bridge/host/none/container
四种类型
实践中比较常见的案例
nginx
bash
# 注意 外部的/nginx/conf下面的内容必须存在,否则挂载会覆盖
docker run --name nginx-app \
-v /app/nginx/html:/usr/share/nginx/html:ro \
-v /app/nginx/conf:/etc/nginx
-d nginx
mysql
bash
# 5.7版本
docker run -p 3306:3306 --name mysql57-app \
-v /app/mysql/log:/var/log/mysql \
-v /app/mysql/data:/var/lib/mysql \
-v /app/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7
# 8.x版本,引入了 secure-file-priv 机制,磁盘挂载将没有权限读写data数据,所以需要将权限透传,
# 或者chmod -R 777 /app/mysql/data
# --privileged 特权容器,容器内使用真正的root用户
docker run -p 3306:3306 --name mysql8-app \
-v /app/mysql/conf:/etc/mysql/conf.d \
-v /app/mysql/log:/var/log/mysql \
-v /app/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
--privileged \
-d mysql
redis
bash
# 提前准备好redis.conf文件,创建好相应的文件夹。如:
port 6379
appendonly yes
#更多配置参照 https://raw.githubusercontent.com/redis/redis/6.0/redis.conf
docker run -p 6379:6379 --name redis \
-v /app/redis/redis.conf:/etc/redis/redis.conf \
-v /app/redis/data:/data \
-d redis:6.2.1-alpine3.13 \
redis-server /etc/redis/redis.conf --appendonly yes
--restart 重启策略
- no,默认策略,在容器退出时不重启容器
- on-failure,在容器非正常退出时(退出状态非0),才会重启容器
- on-failure:3,在容器非正常退出时重启容器,最多重启3次
- always,在容器退出时总是重启容器
- unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器
kill 和 stop 停止容器
kill
是强制杀死(直接拔电源)
stop
可以允许优雅停机(当前正在运行中的程序处理完所有事情后再停止)
exec 进入容器
用法:docker container exec [OPTIONS] CONTAINER COMMAND [ARG...]
别名:docker exec
bash
# 拉取镜像
docker pull alpine
# 运行容器
docker run --name myAlpine -d -i -t alpine /bin/sh
# 进入容器
docker exec -it myAlpine sh
出了 exec 可以进入容器,attach 也可以进入容器,它绑定的是控制台,可能导致容器停止(不要用这个)
ps 列出所有容器
用法:docker container ls [OPTIONS]
别名:docker container list
、docker container ps
、docker ps
常用的 options:
-a, --all
显示所有容器-f, --filter
过滤条件-q, --quiet
仅显示容器ID-s, --size
显示总文件大小
bash
docker ps -a
bash
docker ps
commit 提交容器成镜像
用法:docker container commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
别名:docker commit
一般运行中的容器会常年修改,我们要使用最终的新镜像,就可以将镜像进行 commit
bash
docker commit -a fan -m "first commit" mynginx mynginx:v4
options:
-a, --author
作者-m, --message
提交信息-p, --pause
提交期间暂停容器(默认值为 true)