一、安装Docker
1.1 使用官方安装脚本自动安装
安装命令:
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
也可以使用国内 daocloud 一键安装命令:
curl -sSL https://get.daocloud.io/docker | sh
1.2 手动安装
1.2.1 卸载旧版本
$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
1.2.2 安装相关工具
sudo yum install -y yum-utils
1.2.3 设置yum仓库
官方地址(下载慢)
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
国内一些源地址
##阿里云
$ sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
##清华大学源
$ sudo yum-config-manager \
--add-repo \
https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
1.2.4 安装Docker Engine-Community 和 containerd
$ sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
1.3 启动Docker
$ sudo systemctl start docker
二、 配置Docker镜像加速
## 进入文件夹
$ cd /etc/docker
## 找到daemon.json文件并写入阿里云镜像地址
$ vim daemon.json
{"registry-mirrors":["https://reg-mirror.qiniu.com/"]}
:wq
## 重新启动服务
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
三、Docker简单使用
3.1 寻找可用镜像版本
镜像库地址:https://hub.docker.com 或
3.2 拉取镜像
$ docker pull mysql:latest ##拉取最新版本mysql镜像
3.3 查看镜像
$ docker images
3.4 运行容器
$ docker run -d -p 3306:3306 -v /data/mysql/Mysql:/var/lib/mysql -v /etc/localtime:/etc/localtime -e MYSQL_ROOT_PASSWORD="xxxxx" --name mysql mysql:8.0.31 --lower-case-table-names=1
## docker run + [可选参数] + 镜像名 启动容器
## 参数说明
## -d 后台方式运行
## -p 指定容器端口(映射宿主机3306端口到容器内的3306端口)
## -v 挂载容器卷(-v 宿主机路径:docker容器内路径)
## -e 设置环境变量(这里是制定了mysql root用户的登录密码)
## --name 执行容器别名(--name mysql)
## mysql:8.0.31 镜像名
## --lower-case-table-names=1 (mysql忽略大小写敏感)
3.5 查看是否启动成功
$ docker ps
四、Docker命令
4.1 基础命令
$ docker version ##查看docker版本信息
$ docker info ##查看docker的系统信息,包括镜像和容器的数量
$ docker 命令 --help #帮助命令(可查看可选的参数)
4.2 镜像命令
$ docker images ##查看本地镜像
$ docker rmi [OPTIONS] [IMAGE...] ##删除本地镜像
$ docker save [OPTIONS] [IMAGE...] ##将指定镜像保存成 tar 归档文件
$ docker load [OPTIONS] ##导入使用 docker save 命令导出的镜像
4.3 容器命令
$ docker run [OPTIONS] [COMMAND] [ARG...] ##创建一个新的容器并运行一个命令
# 可选参数上面有解释
$ docker start [容器名] ##启动容器
$ docker stop [容器名] ##停止容器
$ docker restart [容器名] ##重启容器
$ docker kill -s KILL [容器名] ##杀掉一个运行中的容器
$ docker rm [OPTIONS] [CONTAINER...] ##删除一个或多个容器
# 可选参数
# -f :通过 SIGKILL 信号强制删除一个运行中的容器
# -l :移除容器间的网络连接,而非容器本身
# -v :删除与容器关联的卷
$ docker pause [容器名] ##停止容器中所有进程
$ docker unpause [容器名] ##恢复容器中所有进程
$ docker exec [OPTIONS] [COMMAND][ARG...] ##在运行的容器中执行命令
# 可选参数
# -d :分离模式: 在后台运行
# -i :即使没有附加也保持STDIN 打开
# -t :分配一个伪终端
$ docker ps ##列出容器
# 可选参数
# -a :显示所有的容器,包括未运行的
# -f :根据条件过滤显示的内容
$ docker top [容器名] ##查看容器中运行的进程信息,支持 ps 命令参数
$ docker logs [容器名] ##获取容器日志
# 可选参数
# -f : 跟踪日志输出
# --since :显示某个开始时间的所有日志
# -t : 显示时间戳
# --tail :仅列出最新N条容器日志
$ docker port [容器名] ##查看容器的端口映射情况
五、容器卷
5.1 概要
设计目的:
卷的设计目的就是数据持久化(类似于redis中的rdb和aof文件),完全独立于容器的生命周期,因此docker不会在容器删除时删除其挂载的容器卷
作用:
将容器中的数据备份到主机的磁盘中
特点:
# 数据卷可在容器之间共享或重用数据
# 卷中的更改可以直接实时生效
# 数据卷中的更改不会包含在镜像的更新中
# 数据卷的生命周期一直持续到没有容器使用它为止
例:
运行一个带有容器卷存储功能的容器实例
$ docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名
查看数据卷是否挂载成功
$ docker inspect 容器id
挂载成功或在容器挂载的目录中创建文件后在宿主机挂载目录下 可查看到
5.2 设置容器卷的读写规则
读写(默认)
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:rw 镜像名
只读 (容器实例内部被限制,只能读取不能写 。此时如果宿主机写入内容可以同步到容器内,容器内可以读到,但容器内没有写的功能。)
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
5.3 卷的继承与共享
容器1完成和宿主机的映射
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 --name v1 镜像名
容器2继承容器1的卷规则
docker run -it --privileged=true --volumes-from v1 --name v2 镜像名
六、Docker网络
6.1 默认网络
6.1.1
当Docker进程启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器都会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。
宿主机和Docker容器之间是可以进行网络连接的,同样的,Docker容器和容器之间也可以直接进行网络连接。
6.1.2 容器互联
在微服务部署的场景下,注册中心是使用服务名来唯一识别微服务的,而我们上线部署的时候微服务对应的IP地址可能会改动,所以我们需要使用容器名来配置容器间的网络连接。使–link可以完成这个功能。
首先不设置–link的情况下,是无法通过容器名来进行连接的。centos02容器是可以直接ping通centos01的容器ip,但是无法ping通centos01的容器name,添加参数 –link,可以通过容器name进行连接。centos03容器link到centos01,所以centos03可以直接通过ping centos01的容器名去ping通,但是反过来centos01去ping centos03的容器名是ping不通的。
6.2 自定义网络
6.2.1 创建自定义网络
创建自定义网络命令
$ docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
## 参数解释
## docker network create 创建自定义网络
## --driver bridge 指定驱动是 bridge
## --subnet 指定子网
## --gateway 指定网关
## mynet 自定义网络名称
查看docker网络
$ docker network ls
使用自定义网络创建容器后,相同网络name下的容器,不管是通过容器IP还是容器name,都可以进行网络通信
6.2.2 网络联通
在没有使用connect命令的情况下,不同网络间的容器是无法进行网络连接的。
例如:cnetos01属于docker0网络,cnetos2属于mynet网络,此时cnetos1与cnetos2两个容器之间是互相ping不通的。
不同Docker网络之间的容器想要连接的话,需要把该容器注册到另一个容器所在的网络上,使用docker connect命令。
$ docker network connect mynet centos01
connect设置成功后,cnetos1与cnetos2两个容器之间就可以相互访问了。