docker命令手册
基础命令
1 |
|
镜像
1 |
|
标签 含义 REPOSITORY 镜像所在的仓库名称 TAG 镜像标签 IMAGEID 镜像ID CREATED 镜像的创建日期(不是获取该镜像的日期) SIZE 镜像大小
加载镜像
docker run [可选参数] 镜像名 [向启动容器中传入的命令]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18+ -i 表示以《交互模式》运行容器。
+ -d 会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器)。
+ -t 表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
+ –name 为创建的容器命名。(默认会随机给名字,不支持中文字符!!!)
+ -v 表示目录映射关系,即宿主机目录:容器中目录。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
+ -p 表示端口映射,即宿主机端口:容器中端口。 比如:-p 8080:80 就是将容器中的80端口,映射到主机中的8080端口
+ –network=host 表示将主机的网络环境映射到容器中,使容器的网络与主机相同。每个 Docker 容器都有自己的网络连接空间连接到虚拟 LAN。使用此命令则会让容器和主机共享一个网络空间。
### 提交镜像
+ ```shell
# 提交容器副本使之成为一个新的镜像
docker commit -m="描述信息" -a="作者" 容器ID 要创建的目标镜像名字:[标签名]
# 阿里云地址 : https://cr.console.aliyun.com/repository/cn-hangzhou/xiangyu23/base/details
# psuh 到阿里云
docker login --username=向什么来着 registry.cn-hangzhou.aliyuncs.com
docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/xiangyu23/base:[镜像版本号]
docker push registry.cn-hangzhou.aliyuncs.com/xiangyu23/base:[镜像版本号]
# pull 阿里云
容器
# 查看当前所有正在运行的容器 docker ps # 查看当前所有的容器 docker ps -a # 使用过滤器(除了name外,常用的还可以指定id:id= 、所有停止的容器:status=exited,正在运行的容器:status=running 等) docker ps -f name=指定的名字 # 显示2个上次创建的容器(2可以改变) docker ps -n 2 # 显示最新创建的容器(包括所有状态) docker ps -l # 仅显示ID docker ps -q # 显示容器大小 docker ps -s # 启动和关闭 # 启动容器 docker run 容器名或容器id docker start --name[指定名称] 容器名或容器id -d : 后台运行容器并返回容器ID -i : 交互模式运行容器 -t : 为容器分配一个伪输入终端,通常与-i同时使用,也即启动交互式容器 -P : (大写)随机端口映射 -p : 指定端口映射 8080:80 暴露端口:内部的映射端口 docker run是利用镜像生成容器,并启动容器,而docker start是启动一个之前生成过的容器 # 停止容器 docker stop 容器名或容器id # 强制关闭容器 docker kill 容器名或容器id
1
2
3
4
5
6
7
8
9
10
11
12
### 容器交互
+ ```shell
# 启动容器的交互终端
docker exec -it 容器名或容器id 执行的命令
+ 启动后用exit退出不会关闭容器
# 退出容器但是不关闭容器
Ctrl+P+Q
# 从容器拷贝文件到主机
docker cp 容器ID:容器路径 目的主机路径- exec 可选参数
-d 会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器)。 -e 设置环境变量 -i 表示以《交互模式》运行容器。 -t 表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。 -u 设置用户名和UID。 -w 设置容器内的工作目录。
容器监控
# 查看日志 docker logs 容器ID docker top 容器ID # 细致的查看容器的情况 docker inspect 容器ID
1
2
3
4
5
6
7### 导出导出容器
+ ```shell
# 导出容器的内容流作为一个tar归档文件
docker export 容器ID > 文件名.tar
# 从tar包中的内容创建一个新的文件系统再导入为镜像
cat 文件名.tart | docker import -镜像用户/镜像名:镜像版本号
数据卷
# docker 挂载主机目录访问如果出现cannot open directory : Permission denied 在挂载目录后面多加一个 --privileged=true 参数 # 挂载数据卷 docker run -d --privileged=true -v [宿主机路径]:[容器内路径] [镜像名] docker run -d --privileged=true -v D:\docker\shareFile:[容器内路径]:rw [镜像名] # 默认是RW,可以读和写,如果限制容器只有读取权限的话要改成ro # 容器间继承卷的规则 docker run -d --privileged=true --volumes-from [继承的镜像名] [运行的镜像名]
1
2
3
4
5
6### 网络查看
+ ```shell
# 查看当前容器ID的端口
docker inspect --format={{.NetworkSettings.IPAddress}} [容器ID]
docker network inspect [网络名称]
常用中间件的安装
mysql
docker run -p 3306:3306 --privileged=true -v D:\docker\dockerFile\mysql\log:/var/log/mysql -v D:\docker\dockerFile\mysql\data:/var/lib/mysql -v D:\docker\dockerFile\mysql\conf:/etc/mysql/conf.d --name xyMysql -e env LANG=C.UTF-8 -e MYSQL_ROOT_PASSWORD=xiangyu9527 mysql:5.7 docker run -d -p 3306:3306 --privileged=true -v D:\docker\dockerFile\mysql\log:/var/log/mysql -v D:\docker\dockerFile\mysql\data:/var/lib/mysql -v D:\docker\dockerFile\mysql\conf:/etc/mysql/conf.d --name xyMysql -e MYSQL_ROOT_PASSWORD=xiangyu9527 -e LANG=C.UTF-8 -e LC_ALL=C.UTF-8 mysql:5.7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38+ 主从Mysql
+ ```shell
docker run
-d
-p 3307:3306
--privileged=true
-v D:\docker\dockerFile\mysqlMaster\log:/var/log/mysql
-v D:\docker\dockerFile\mysqlMaster\data:/var/lib/mysql
-v D:\docker\dockerFile\mysqlMaster\conf:/etc/mysql/conf.d
--name mysqlMaster
-e MYSQL_ROOT_PASSWORD=root
mysql:5.7
docker run -d -p 3307:3306 --privileged=true -v D:\docker\dockerFile\mysqlMaster\log:/var/log/mysql -v D:\docker\dockerFile\mysqlMaster\data:/var/lib/mysql -v D:\docker\dockerFile\mysqlMaster\conf:/etc/mysql/conf.d --name mysqlMaster -e MYSQL_ROOT_PASSWORD=root mysql:5.7
#设置用户权限
create user 'slave'@'%' identified by '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
docker run
-d
-p 3308:3306
--privileged=true
-v D:\docker\dockerFile\mysqlSlave\log:/var/log/mysql
-v D:\docker\dockerFile\mysqlSlave\data:/var/lib/mysql
-v D:\docker\dockerFile\mysqlSlave\conf:/etc/mysql/conf.d
--name mysqlSlave
-e MYSQL_ROOT_PASSWORD=root
mysql:5.7
docker run -d -p 3308:3306 --privileged=true -v D:\docker\dockerFile\mysqlSlave\log:/var/log/mysql -v D:\docker\dockerFile\mysqlSlave\data:/var/lib/mysql -v D:\docker\dockerFile\mysqlSlave\conf:/etc/mysql/conf.d --name mysqlSlave -e MYSQL_ROOT_PASSWORD=root mysql:5.7
# 从机配置
change master to master_host='172.17.0.2' , master_user='slave',master_password='123456',master_port=3306,master_log_file='mall-mysql-bin.000001',master_log_pos=617,master_connect_retry=30;
redis
docker run -d -p 6379:6379 --privileged=true -v D:\docker\dockerFile\redis\redis.conf:/etc/redis/redis.conf -v D:\docker\dockerFile\redis\data:/data --name xyRedis redis:6.0.8 redis-server /etc/redis/redis.conf docker run -d -p 6379:6379 --privileged=true -v D:\docker\dockerFile\redis\redis.conf:/etc/redis/redis.conf -v D:\docker\dockerFile\redis\data:/data --name xyRedis redis:6.0.8 redis-server /etc/redis/redis.conf
1
2
3
4
5
6
7
8
9
10
11
12+ 集群
+ ```shell
docker run
-d
--name redis-node-1
--net host
--privileged=true
-v D:\docker\dockerFile\redisNode1\data:/data
redis:6.0.8
--cluster-enabled yes
--appendonly yes
--port 6381
rockertmq
- 安装namesrv
docker run -d --restart=always --name rmqnamesrv --privileged=true -p 9876:9876 -v D:\docker\dockerFile\rocketMQ\data\namesrv\logs:/root/logs -v D:\docker\dockerFile\rocketMQ\data\namesrv\store:/root/store -e "MAX_POSSIBLE_HEAP=100000000" -e "JAVA_OPT_EXT=-Xms512M -Xmx512M -Xmn128m" apache/rocketmq sh mqnamesrv docker run -d --restart=always --name rmqnamesrv --privileged=true -p 9876:9876 -v D:\docker\dockerFile\rocketMQ\data\namesrv\logs:/root/logs -v D:\docker\dockerFile\rocketMQ\data\namesrv\store:/root/store -e "MAX_POSSIBLE_HEAP=100000000" -e "JAVA_OPT_EXT=-Xms512M -Xmx512M -Xmn128m" apache/rocketmq sh mqnamesrv
+ config + ``` brokerClusterName = DefaultCluster brokerName = broker-a brokerId = 0 deleteWhen = 04 fileReservedTime = 48 brokerRole = ASYNC_MASTER flushDiskType = ASYNC_FLUSH brokerIP1 = 127.0.0.1 diskMaxUsedSpaceRatio=951
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
+ broker
+ ```shell
docker run -d
--restart=always
--name rmqbroker
--link rmqnamesrv:namesrv
-p 10911:10911
-p 10909:10909
-v D:\docker\dockerFile\rocketMQ\data\broker\logs:/root/logs
-v D:\docker\dockerFile\rocketMQ\data\broker\store:/root/store
-v D:\docker\dockerFile\rocketMQ\data\broker\conf\broker.conf:/home/rocketmq/rocketmq-4.9.4/conf/broker.conf
-e "NAMESRV_ADDR=namesrv:9876"
-e "JAVA_OPT_EXT=-Xms512M -Xmx512M -Xmn128m"
-e "MAX_POSSIBLE_HEAP=200000000"
apache/rocketmq
sh mqbroker -c /home/rocketmq/rocketmq-4.9.2/conf/broker.conf
docker run -d --restart=always --name rmqbroker --link rmqnamesrv:namesrv -p 10911:10911 -p 10909:10909 -v D:\docker\dockerFile\rocketMQ\data\broker\logs:/root/logs -v D:\docker\dockerFile\rocketMQ\data\broker\store:/root/store -v D:\docker\dockerFile\rocketMQ\data\broker\conf\broker.conf:/home/rocketmq/rocketmq-4.9.4/conf/broker.conf -e "NAMESRV_ADDR=namesrv:9876" -e "JAVA_OPT_EXT=-Xms512M -Xmx512M -Xmn128m" -e "MAX_POSSIBLE_HEAP=200000000" apache/rocketmq sh mqbroker -c /home/rocketmq/rocketmq-4.9.2/conf/broker.conf1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
+ consloe
+ ```shell
docker run -d
--restart=always
--name rmqadmin
-e "JAVA_OPTS=-Drocketmq.namesrv.addr=127.0.0.1:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false"
-p 8085:8080
--ulimit nofile=1024
styletang/rocketmq-console-ng:latest
docker run -d --restart=always --name rmqadmin -e "JAVA_OPTS=-Drocketmq.namesrv.addr=127.0.0.1:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" -p 8085:8080 --ulimit nofile=1024
styletang/rocketmq-console-ng:latest
Dockerfile
# 通过dockerfile 构建镜像 docker build -t contosjava8:1.0 . # -f [文件路径] 可以指定文件路径
docker命令手册
https://x-leonidas.github.io/2023/03/17/15云和容器/docker命令手册/