容器命令

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"
游荡时间:
到此一游: xoxu