本文案例环境在centos7.9系统下操作
依赖包安装
yum install -y yum-utils device-mapper-persistent-data lvm2
添加yum源,(docker-ce是docker公司维护的开源项目,是一个基于moby项目的免费的容器产品;docker-ee是docker公司维护的闭源产品,是docker公司的商业产品;docker-ce project是docker公司维护,docker-ee是闭源的;要使用免费的docker,从网页docker-ce上获取;要使用收费的docker,从网页docker-ee上获取。)
[root@localhost ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
Loaded plugins: fastestmirror
adding repo from: https://download.docker.com/linux/centos/docker-ce.repo
grabbing file https://download.docker.com/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
repo saved to /etc/yum.repos.d/docker-ce.repo
安装docker
[root@localhost ~]# yum install -y docker-ce
[root@localhost ~]# docker -v
Docker version 20.10.21, build baeda1f
配置
[root@localhost ~]# mkdir /etc/docker
[root@localhost ~]# cat >> /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
EOF
[root@localhost ~]# cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl restart docker
docker服务管理基本命令
#启动/关闭/重启docker服务
systemctl start/stop/restart docker
#设置开机启动docker服务
systemctl enable docker
#取消开机启动docker服务
systemctl disable docker
#查看是否开机自启(enable:开启,disable:关闭)
systemctl list-unit-files | grep docker
镜像操作
#查看镜像:本地有哪些镜像
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
#搜索镜像:从网络中搜索可用的镜像
[root@localhost ~]# docker search ${imgname}
#拉取镜像:从Docker仓库下载镜像
#docker pull 镜像名称
#docker pull 镜像名称:版本
#删除镜像:删除本地的镜像
#docker rmi 镜像名称
#docker rmi 镜像名称:版本
案例
###拉去redis镜像
[root@localhost ~]# docker pull redis
Using default tag: latest
latest: Pulling from library/redis
e9995326b091: Pull complete
f2cd78d6f24c: Pull complete
8f3614d34c89: Pull complete
697fd51ec515: Pull complete
a554cf50a327: Pull complete
66f93c02e79c: Pull complete
Digest: sha256:aeed51f49a6331df0cb2c1039ae3d1d70d882be3f48bde75cd240452a2348e88
Status: Downloaded newer image for redis:latest
docker.io/library/redis:latest
#查看本地镜像
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
redis latest c2342258f8ca 5 days ago 117MB
##拉取特定版本
[root@localhost ~]# docker pull redis:5.0
5.0: Pulling from library/redis
e9995326b091: Already exists
f2cd78d6f24c: Already exists
8f3614d34c89: Already exists
a9c5d537deea: Pull complete
82aa9c8f3f00: Pull complete
6453e701d8ee: Pull complete
Digest: sha256:c7092cb213ccc98f8ccb1c5b479a3535c4d6f51ef6f3748934749575cf24f170
Status: Downloaded newer image for redis:5.0
docker.io/library/redis:5.0
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
redis 5.0 61807950b074 5 days ago 110MB
redis latest c2342258f8ca 5 days ago 117MB
####删除镜像
[root@localhost ~]# docker rmi redis:5.0
Untagged: redis:5.0
Untagged: redis@sha256:c7092cb213ccc98f8ccb1c5b479a3535c4d6f51ef6f3748934749575cf24f170
Deleted: sha256:61807950b07480dc8135587b51b9d1d6d9c77353ee9410fa2a67337291f3e346
Deleted: sha256:e2d2d66623af5caae3c8eabaa19e4666afa9ae46ecf5ba3ef26137f4fc3f5e5d
Deleted: sha256:f3e9c35f9395810b96df18682d3a231ec48fe32073988c8fd132e0f93187964f
Deleted: sha256:03ac96f2326352294ab318d8cb3493251aaafb5c224e4676821c776c8357f1e3
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
redis latest c2342258f8ca 5 days ago 117MB
容器运行相关命令
容器就是镜像物理文件运行出来的实例,镜像和容器可以理解为"软件"的两种不同状态。
#查看运行中的容器
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
#-a:查看所有容器(默认只显示运行中的容器)
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
#(创建容器)运行镜像
[root@localhost ~]# docker run -id --name=c1 redis
ec585168de5cd0b56766bb1df927cd0874dc8dc6b50e33893d5584863c6893aa
#-i:保持容器运行
#-d:守护模式(创建的容器在后台运行)
#-t:分配一个伪终端,通常与-i同时使用
#–name:为创建的容器命名
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ec585168de5c redis "docker-entrypoint.s…" About a minute ago Up About a minute 6379/tcp c1
#进入容器
[root@localhost ~]# docker exec -it c1 bash
root@ec585168de5c:/data#
#退出容器
root@ec585168de5c:/data# exit
exit
##停止容器
[root@localhost ~]# docker stop c1
c1
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ec585168de5c redis "docker-entrypoint.s…" 5 minutes ago Exited (0) 2 seconds ago c1
##查看容器信息
[root@localhost ~]# docker inspect c1
##删除容器
[root@localhost ~]# docker rm c1
mysql
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
容器数据持久化:即使容器被删除,宿主机中仍然可以保留容器中的数据, 外部机器和容器通信:Docker容器采用沙箱机制隔离,无法直接与外部机器交换文件,配置数据卷后,可以将文件放到宿主机的映射目录下,然后自动同步到容器中。
#创建容器时,使用 -v 参数 配置数据卷
#docker run -id --name=c1 -v 宿主机目录:容器内目录 redis bash
#目录必须是绝对路径
#如果目录不存在,会自动创建
# 1、创建redis容器,把容器的/root/data目录映射到宿主机的/root/data目录
docker run -id --name=c1 -v /root/data:/root/data redis bash
# 2、在宿主机的映射目录中,创建文件 a.txt
touch /root/data/a.txt
# 3、查看宿主机的文件是否创建成功
ls /root/data
# 4、进入redis容器(根据容器名c1)
docker exec -it c1 bash
# 5、查看容器的映射目录中,是否同步创建了文件a.txt
ls /root/data
[root@localhost ~]# docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql
d67a603b911a: Pull complete
0cf69c8f1492: Pull complete
a5ee239a0d3a: Pull complete
0f166cb3e327: Pull complete
882d294bf188: Pull complete
2649fc7eb806: Pull complete
bddb3394e2e3: Pull complete
93c83d9a2206: Pull complete
99d7f45787c0: Pull complete
234663a2e3ee: Pull complete
74531487bb7b: Pull complete
Digest: sha256:d4055451e7f42869e64089a60d1abc9e66eccde2910629f0dd666b53a5f230d8
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest
###创建MySQL容器
[root@localhost ~]# docker run -id -p 3306:3306 --name=mysql -v /root/mysql/conf:/etc/mysql/conf.d -v /root/mysql/logs:/logs -v /root/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql
#参数说明:
#\(反斜杠):用于换行,增加代码可读性
#-p 3306:3306:将容器的3306端口(右)映射到宿主机的3306端口(左)
#-v /root/mysql/conf:/etc/mysql/conf.d:映射配置目录
#-v /root/mysql/logs:/logs:映射日志目录
#-v /root/mysql/data:/var/lib/mysql:映射数据目录
#-e MYSQL_ROOT_PASSWORD=123456:初始化root密码
###进入容器登录mysql
[root@localhost ~]# docker exec -it mysql bash
bash-4.4# mysql -uroot -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.31 MySQL Community Server - GPL
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
参考文档:https://blog.csdn.net/wangyuxiang946/article/details/127432218