Docker常用容器命令
新建容器并启动
docker run [可选参数] 镜像名称
# 参数说明
--name= 容器名称
-d 后台运行方式
-it 采用交互模式运行
-p 主机端口:容器端口 指定容器端口映射
-P 随机指定端口
-v 卷挂载
-e 环境配置
列出所有的容器
docker ps命令
# 列出正在运行的容器
-a # 列出所有的容器
-n=? # 显示最近创建的容器
-q # 只显示容器ID
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
11025ffd4e80 redis:5.0.9-alpine3.11 "docker-entrypoint.s…" 11 hours ago Up 11 hours 0.0.0.0:6376->6379/tcp, :::6376->6379/tcp, 0.0.0.0:16376->16379/tcp, :::16376->16379/tcp redis-6
31b5ce0cd98c redis:5.0.9-alpine3.11 "docker-entrypoint.s…" 11 hours ago Up 11 hours 0.0.0.0:6375->6379/tcp, :::6375->6379/tcp, 0.0.0.0:16375->16379/tcp, :::16375->16379/tcp redis-5
ccc05f2ab8bc redis:5.0.9-alpine3.11 "docker-entrypoint.s…" 11 hours ago Up 11 hours 0.0.0.0:6374->6379/tcp, :::6374->6379/tcp, 0.0.0.0:16374->16379/tcp, :::16374->16379/tcp redis-4
20e40bf0dc2b redis:5.0.9-alpine3.11 "docker-entrypoint.s…" 11 hours ago Up 11 hours 0.0.0.0:6373->6379/tcp, :::6373->6379/tcp, 0.0.0.0:16373->16379/tcp, :::16373->16379/tcp redis-3
f32e7a237dc7 redis:5.0.9-alpine3.11 "docker-entrypoint.s…" 11 hours ago Up 11 hours 0.0.0.0:6372->6379/tcp, :::6372->6379/tcp, 0.0.0.0:16372->16379/tcp, :::16372->16379/tcp redis-2
9b52db0451d1 redis:5.0.9-alpine3.11 "docker-entrypoint.s…" 11 hours ago Up 11 hours 0.0.0.0:6371->6379/tcp, :::6371->6379/tcp, 0.0.0.0:16371->16379/tcp, :::16371->16379/tcp redis-1
进入当前正在运行的容器
# 方式一
docker exec -it 容器名 /bin/bash 或 sh
进入容器后开启一个新的终端,可以在里面操作(常用)
# 方式二
docker attach -it 容器名 /bin/bash 或 sh
进入容器当前正在运行的终端
退出容器
exit
ctrl + P + Q # 容器不停止退出
删除容器
docker rm 容器ID或名称 # 不能删除正在运行的容器 如果要强制删除rm -f
docker rm -f $(docker ps -aq) # 删除所有容器
docker ps -a -q | xargs docker rm # 删除所有容器
启动和停止容器操作
docker start 容器ID或名称
docker stop 容器ID或名称
docker restart 容器ID或名称
docker kill 容器ID或名称 # 强制停止容器
常用其他命令
后台启动命令
docker run -d 镜像名 # 常见问题:docker容器使用后台运行,就必须要有一个前台进程,否则docker发现没有 应用,就会自己停止。 # nginx容器启动后,发现自己没有提供服务,就会立即停止
查看日志
docker logs 容器名 # 可选参数 -f 持续显示日志 -t 显示日志时间戳 -n 自定义日志条数显示
查看容器中进程信息
docker top 容器名
UID PID PPID C STIME TTY TIME CMD polkitd 48681 48660 0 7月23 ? 00:01:21 redis-server /etc/redis/redis.conf
查看容器元数据
docker inspect 容器名
从容器内拷贝文件到主机上
docker cp 容器名:容器内路径 目的主机路径
容器数据卷
docker run -v 本机目录:容器目录
docker run --it -v /home/ceshi:/home centos /bin/bash
实现数据持久化
具名挂载和匿名挂载
# 匿名挂载
-V 容器内路径
docker run -d -P --name nginx01 -v /etc/nginx nginx
# 查看所有volume的情况
docker volume ls
# 具名挂载
docker -run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx
所有的docker容器内的卷,没有指定目录的情况下都在/var/lib/docker/volumes/xxxx/_data
我们通过具名挂载可以方便的找到我们的一个卷,大多数情况在使用的具名挂载
-v 容器内路径 # 匿名挂载
-v 卷名:容器内路径 # 具名挂载
-v /宿主机路径:/容器内路径 # 指定路径挂载
拓展
# 通过-v容器内路径 :ro rw改变读写权限
ro readonly # 只读
rw readwrite # 可读可写
docker run -d -P --name nginx01 -v juming-nginx:/etc/nginx:ro nginx
docker run -d -P --name nginx01 -v juming-nginx:/etc/nginx:rw nginx
数据卷容器
多个mysql数据同步
docker run -d -p 3310:3306 -v /etc/mysql/conf.d -v /var/lib/mysql
-e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
docker run -d -p 3310:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql02
--volumes-form mysql01 mysql:5.7