1.基础命令
systemctl start docker 启动docker
systemctl stop docker 关闭docker
systemctl enable docker 开机自启动docker
2.镜像命令
docker images 查看本地主机的所有镜像
docker search (镜像名) 搜索镜像
docker pull 镜像名[:tag] ** 下载镜像
docker run 镜像名[:tag] ** 运行镜像
删除镜像命令
删除一个
docker rmi -f 镜像名/镜像ID
删除多个 其镜像ID或镜像用空格隔开即可
docker rmi -f 镜像名/镜像ID 镜像名/镜像ID 镜像名/镜像ID
删除全部镜像 -a 意思为显示全部, -q 意思为只显示ID
docker rmi -f $(docker images -aq)
强制删除镜像
docker image rm 镜像名称/镜像ID
保存镜像( 将我们的镜像保存为tar 压缩文件 这样方便镜像转移和保存 )
docker save 镜像名/镜像ID -o 镜像保存在哪个位置与名字
示例:docker save tomcat -o /myimg.tar
加载镜像( 任何装 docker 的地方加载镜像保存文件,使其恢复为一个镜像 )
docker load -i 镜像保存文件位置
示例:docker load -i /myimg.tar(然后用docker images命令即可看到已加载该镜像了)
镜像标签~
3.容器命令
容器:通过run 镜像 来构建 自己的容器实例
docker ps [-a] 查看运行容器列表(-a为列出所有容器)
-it 表示 与容器进行交互式启动 -d 表示可后台运行容器 (守护式运行) --name 给要运行的容器 起的名字 /bin/bash 交互路径
运行容器
docker run [可选参数] image
#参数说明
--name="名字" 指定容器名字
-d 后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p 指定容器的端口
(
-p ip:主机端口:容器端口 配置主机端口映射到容器端口
-p 主机端口:容器端口
-p 容器端口
)
-P 随机指定端口(大写的P)
docker run -it -d --name 要取的别名 镜像[:tag] /bin/bash
注意
1.这里的端口和本地机上的端口没有关系, 若相产生关联,需要使用上面提到的 容器端口映射
示例:docker run -itd --name redis002 -p 8888:6379 redis:5.0.5 /bin/bash
2.docker容器后台运行,必须要有一个前台的进程,否则会自动停止
停止容器
docker stop 容器名/容器ID
删除容器
#删除一个容器
docker rm -f 容器名/容器ID
#删除多个容器 空格隔开要删除的容器名或容器ID
docker rm -f 容器名/容器ID 容器名/容器ID 容器名/容器ID
#删除全部容器
docker rm -f $(docker ps -aq)
进入容器
1 exec 方式(推荐)
docker exec -it 容器名/容器ID /bin/bash
2.attch方式
docker attach 容器名/容器ID
退出容器
exit 停止并退出容器(后台方式运行则仅退出)
Ctrl+P+Q 不停止容器退出
停止容器
docker stop 容器ID/容器名
重启容器
docker restart 容器ID/容器名
启动容器
docker start 容器ID/容器名
kill 容器
docker kill 容器ID/容器名
容器文件拷贝
#从容器内 拷出
docker cp 容器ID/名称: 容器内路径 容器外路径
#从外部 拷贝文件到容器内
docker cp 容器外路径 容器ID/名称: 容器内路径
查看容器日志
docker logs [--tail number] 容器id或容器名 #num为要显示的日志条数
查看容器进程信息
docker top id或名
查看容器元数据
docker inspect id或名
开机自启动容器
启动容器时,使用docker run命令时 添加参数--restart=always
便表示,该容器随docker服务启动而自动启动
更换容器名
docker rename 容器ID/容器名 新容器名
3.数据挂载
简单来讲,就是将容器内的数据与外部宿主机文件绑定起来,类似一个双持久化,当容器删除时,宿主机文件数据目录仍在,下次启动容器只要将数据目录指向宿主机数据所在位置即可恢复!
格式:-v 宿主机文件存储位置:容器内文件位置
示例
# 运行一个docker redis 容器 进行 端口映射 两个数据卷挂载 设置开机自启动
docker run -d -p 6379:6379 --name redis505 --restart=always -v /var/lib/redis/data/:/data -v /var/lib/redis/conf/:/usr/local/etc/redis/redis.conf redis:5.0.5 --requirepass "password"
容器数据卷
首先启动容器1,volume01、volume02为挂载目录。
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker run -it --name cnetos01 ethan/centos:1.0
然后启动容器2,通过参数--volumes-from,设置容器2和容器1建立数据卷挂载关系。
[root@iZwz99sm8v95sckz8bd2c4Z /]# docker run -it --name centos02 --volumes-from cnetos01 ethan/centos:1.0
4.提交镜像
docker commit -m="提交信息" -a="作者信息" 容器名/容器ID 提交后的镜像名:Tag
示例:
我们拉取一个tomcat镜像 并持久化运行 且设置与宿主机进行端口映射
[root@localhost user]# docker pull tomcat
[root@localhost user]# docker run -d --name tom -p 9999:8080 tomcat
[root@localhost user]# curl -I localhost:9999
HTTP/1.1 404
Content-Type: text/html;charset=utf-8
Content-Language: en
Transfer-Encoding: chunked
Date: Sun, 10 Jul 2022 13:39:42 GMT
#我们发现是404,这是因为还需要进行如下操作才可以真正启动tomcat
#进入容器
[root@localhost user]# docker exec -it tom /bin/bash
root@e956083500f6:/usr/local/tomcat# cp -r webapps.dist/* webapps
#退出容器
[root@localhost user]# docker exec -it tom /bin/bash
root@e956083500f6:/usr/local/tomcat# ls
BUILDING.txt NOTICE RUNNING.txt lib temp work
CONTRIBUTING.md README.md bin logs webapps
LICENSE RELEASE-NOTES conf native-jni-lib webapps.dist
root@e956083500f6:/usr/local/tomcat# cp -r webapps.dist/* webapps
root@e956083500f6:/usr/local/tomcat# exit
exit
[root@localhost user]# curl -I localhost:9999
HTTP/1.1 200
Content-Type: text/html;charset=UTF-8
Transfer-Encoding: chunked
Date: Sun, 10 Jul 2022 13:42:40 GMT
#200 成功
若想在本地机中访问虚拟机中的tomcat服务
虚拟机中使用ifconfig查看虚拟机ip
浏览器中访问:http://192.168.159.138:9999 成功
使用 提交命令 将在运行的tomcat 容器 打包为一个全新的镜像 名字为tom Tag为1.0
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql latest 7e7e458be53c 4 days ago 444MB
nginx latest 605c77e624dd 6 months ago 141MB
tomcat latest fb5657adc892 6 months ago 680MB
hello-world latest feb5d9fea6a5 9 months ago 13.3kB
centos latest 5d0da3dc9764 9 months ago 231MB
[root@localhost user]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e956083500f6 tomcat "catalina.sh run" 38 minutes ago Up 38 minutes 0.0.0.0:9999->8080/tcp, :::9999->8080/tcp tom
7137c16a9164 nginx "/docker-entrypoint.…" 46 minutes ago Up 46 minutes 0.0.0.0:3344->80/tcp, :::3344->80/tcp ng01
[root@localhost user]# docker commit -a="xiaobai" -m="xiaobai-tom" e956083500f6 tom:1.0
sha256:f6387f05c42f0e21cd5c305b458465f09da9c099454d8753f96c268a7b5b7dd8
[root@localhost user]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tom 1.0 f6387f05c42f 12 seconds ago 684MB
mysql latest 7e7e458be53c 4 days ago 444MB
nginx latest 605c77e624dd 6 months ago 141MB
tomcat latest fb5657adc892 6 months ago 680MB
hello-world latest feb5d9fea6a5 9 months ago 13.3kB
centos latest 5d0da3dc9764 9 months ago 231MB
[root@localhost user]# docker run -d -p 9000:8080 --name my_tom tom:1.0
45f388e9212c1ed50308736ce16356b0eec0448693885ace10d631d11f3fc986
[root@localhost user]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
45f388e9212c tom:1.0 "catalina.sh run" 15 seconds ago Up 13 seconds 0.0.0.0:9000->8080/tcp, :::9000->8080/tcp my_tom
e956083500f6 tomcat "catalina.sh run" 44 minutes ago Up 44 minutes 0.0.0.0:9999->8080/tcp, :::9999->8080/tcp tom
7137c16a9164 nginx "/docker-entrypoint.…" 53 minutes ago Up 53 minutes 0.0.0.0:3344->80/tcp, :::3344->80/tcp ng01