容器命令
1、新建+启动容器
docker run -it ubuntu /bin/bash #进入ubuntu
docker run --name nginx -p 9091:80 -d nginx:1.21.6
# --name 容器名称。 -d 后台运行容器。
# -i 以交互模式运行,通常与-t同时使用
# -t 为容器重新分配一个伪输入终端,通常与-i同时使用
# -P 随机端口映射,大写P
# -p 指定端口映射,小写p
2、列出所有运行容器
docker ps
# -a 列出当前所有运行的容器+历史上运行过的
# -l 显示最近创建的容器
# -n 显示最近n个创建的容器 docker ps -n 2
# -q 静默模式,只显示容器编号
3、停止/启动/重启/进入退出/删除容器...
停止容器
docker stop [name]/[id] #停止容器可以输入容器name或容器id
docker kill [name]/[id] #强制停止容器
启动容器
docker start [name]/[id] #启动容器可以输入容器name或容器id
重启容器
docker restart [name]/[id] #重启容器可以输入容器name或容器id
进入容器
docker attach [name]/[id] #直接进入容器可以输入容器name或容器id
exit #退出容器停止
Ctrl+p+q #按快捷键Ctrl+p+q,退出但保持容器正常运行
docker exec -it [name]/[id] bash #带交换命令参数进入容器,在容器中打开新的终端,并且可以启动新的进程用exit退出,不会导致容器停止
删除容器
docker rm [name]/[id] #删除容器可以输入容器name或容器id
docker rm -f [name]/[id] #强制删除
查看日志
docker logs [name]/[id] #删除容器可以输入容器name或容器id
查看容器进程、内部细节
docker top [name]/[id] #查看容器运行的进程
docker inspect [name]/[id] #查看容器内部细节
4、文件操作
从容器拷贝到本地
docker cp [name]/[id]:/etc/nginx/nginx.conf d:/ #拷贝到D盘下
导出容器导入镜像
docker export #导出容器内容留作为一个tar归档文件
docker export [name]/[id] > abcd.tar #linux下操作
docker export [name]/[id] -o d:/abcd.tar #windows下去掉>加-o
docker import #从tar包中内容创建一个新的文件系统再导入为镜像
cat d:/abcd.tar | docker import - xx/nginxs/8.0
docker image import d:/abcd.tar nginxs:8.0 #导入后报错
导入后报错,需要指定CommandCommand可以通过下面命令查询到:
docker ps -a --no-trunc
查询到Command之后,运行容器:
/docker-entrypoint.sh nginx -g 'daemon off;'#复制到后面,容器就正常启动了
docker run --name nginxs -d -p 4000:80 nginxs:8.0 /docker-entrypoint.sh nginx -g 'daemon off;'
提交容器副本成为新的镜像
docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名字:[标签名]
docker commit -m"ubuntu vim" -a"xurong" 93561b5e6169 ubuntuvs:1.0
5、部署私有库
docker pull registry
运行容器
docker run -d -p 5000:5000 -v /zzyyuse/myregistry/:/tmp/registry --privileged=true registry
上传镜像
docker push 127.0.0.1:5000/xx/nginxs:8.0
下载镜像
docker pull 127.0.0.1:5000/xx/nginxs:8.0
6、容器数据卷
centos7中挂载主机目录访问如果出现cannot open directory.:Permission denied.
解决办法挂载目录加参数,容器拥有root权限
--privileged=true
运行带有容器卷存储功能实例
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名
docker run -it --privileged=true -v e:/ss/data:/tmp/docker_data --name=u1 ubuntu
查看数据卷是否挂载成功
docker inspect 容器ID
容器只读配置
#容器只读,在容器目录后面加:ro ro=read only
docker run -it --privileged=true -v e:/ss:/tmp:ro --name=u1 ubuntu
容器卷之间继承
docker run -it --privileged=true --volumes-from 父类 --name u2 ubuntu
docker run -it --privileged=true --volumes-from u1 --name u2 ubuntu
#实现了容器共享数据间传递
7、Mysql实例配置
下载安装mysql5.7版本
docker pull mysql:5.7
#简单mysql容器运行
docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
#挂数据卷容器配置分解
docker run -d -p 3306:3306 --name mysql --privileged=true
-v e:/ss/mysql/log:/var/log/mysql
-v e:/ss/mysql/data:/var/lib/mysql
-v e:/ss/mysql/conf:/etc/mysql/conf.d
-e MYSQL_ROOT_PASSWORD=123456
mysql:5.7
#合并一句
docker run -d -p 3306:3306 --name mysql --privileged=true -v e:/ss/mysql/log:/var/log/mysql -v e:/ss/mysql/data:/var/lib/mysql -v e:/ss/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
mysql数据库设置中文utf8格式
#在映射卷中新建my.cnf文件写入如下配置,权限chmod 644 /etc/my.cnf
[client]
default_character_set = utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8
8、redis部署
下载安装redis6.0.8版本
docker pull redis:6.0.8
docker run --name redis6 -d -p 6379:6379 redis:6.0.8
docker exec -it redis6 bash
redis-cli
set k1 v1
get k1
#挂数据卷容器配置分解
docker run -p 6379:6379 --name redis6 --privileged=true
-v e:/ss/redis/redis.comf:/etc/redis/redis.conf
-v e:/ss/redis/data:/data
-d redis:6.0.8 redis-server /etc/redis/redis.conf
#合并一句
docker run -p 6379:6379 --name redis6 --privileged=true -v e:/ss/redis/redis.comf:/etc/redis/redis.conf -v e:/ss/redis/data:/data -d redis:6.0.8 redis-server /etc/redis/redis.conf
9、集群部署
docker run -d --name redis-node-1 --net host --privileged=true -v e:/ss/redis/share/redis-node-1:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6381
docker run -d --name redis-node-2 --net host --privileged=true -v e:/ss/redis/share/redis-node-2:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6382
docker run -d --name redis-node-3 --net host --privileged=true -v e:/ss/redis/share/redis-node-3:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6383
docker run -d --name redis-node-4 --net host --privileged=true -v e:/ss/redis/share/redis-node-4:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6384
docker run -d --name redis-node-5 --net host --privileged=true -v e:/ss/redis/share/redis-node-5:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6385
docker run -d --name redis-node-6 --net host --privileged=true -v e:/ss/redis/share/redis-node-6:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6386
进入容器
docker exec -it redis-node-1 bash
#构建集群
redis-cli --cluster create 172.17.0.1:6381 172.17.0.1:6382 172.17.0.1:6383 172.17.0.1:6384 172.17.0.1:6385 172.17.0.1:6386 --cluster-replicas 1
查看集群状态
redis-cli -p 6381
#进入查询
cluster info
cluster nodes
10、network网络配置
查看、创建、删除
#查看所有网络
docker network ls
#创建新网络xx_network
docker network create xx_network
#删除网络xx_network
docker network rm xx_network
#查看网络详细配置
docker network inspect bridge
网络模式
网络模式 | 简介 |
---|---|
bridge | 为每一个容器分配、设置IP等,并将容器接到一个 docker0 虚拟网桥,默认为该模式 |
host | 容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口 |
none | 容器有独立的Network namespace,但并没有对其进行任何网络设置,如分配veth pair和网桥连接,ip等 |
container | 新创建的容器不会创建自己的网卡和配置自己的IP,而是和一个指定的容器共享IP、端口范围等 |
使用host模式
docker run --name nginx_c -it -d --network host nginx:1.21.6
#windows10无效~~~!!
使用none模式
#禁用网络功能,只有lo标识,自己进去配置网络
docker run -d -p 3909:80 --name nginx_c --network none nginx:1.21.6
使用container模式
#多容器共用同一网络IP、端口
docker run --name nginx_a -it -d -p 7908:80 nginx:1.21.6
docker run --name nginx_b -it -d -p 7909:80 --network container:nginx_a nginx:1.21.6
#好像BUG只能使用alpine linux系统
自定义网络
#加入自定义网络
docker network create bb_network
docker run -d -p 3908:80 --network bb_network --name nginxa nginx:1.21.6
docker run -d -p 3909:80 --network bb_network --name nginxb nginx:1.21.6
#进入容器
docker exec -it nginxa bash
ip addr
ping nginxb
11、compose编排服务
compose常用命令
docker-compose -h #查看帮助
docker-compose up #启动所有docker-compose服务
docker-compose up -d #启动所有docker-compose服务并后台运行
docker-compose down #停止并删除容器、网络、卷、镜像
docker-compose exec yml里面的服务id #进入容器实例内部
docker-compose -f my-composexx.yml up -d #指定编排文件名字
https://www.bilibili.com/video/BV1754y1J7KA?p=27&vd_source=302037f7e237244348ab0110c6df6d33
12、其他
在Docker中,如果你想要在容器中运行/bin/bash并且让这个进程始终运行,你可以使用docker run命令的-d或--detach标志来实现守护进程模式。这样做可以确保容器在后台持续运行,即使运行/bin/bash的会话结束后,容器也不会退出。
docker run -d centos /bin/bash -c "while true; do sleep 1; done"