docker
安装
首先如果系统中已经存在旧的 Docker,则先卸载:
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine \
docker-selinux
安装一个 yum 工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
安装成功后,执行命令,配置 Docker 的 yum 源(已更新为阿里云源):
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
更新 yum,建立缓存
sudo yum makecache timer
安装 Docker
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
启动
# 启动Docker
systemctl start docker
# 停止Docker
systemctl stop docker
# 重启
systemctl restart docker
# 设置开机自启
systemctl enable docker
# 执行docker ps命令,如果不报错,说明安装启动成功
docker ps
这里使用服务器安装
使用阿里云镜像加速
部署 MySQL
docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
mysql
*Docker会自动搜索并下载MySQL。注意:这里下载的不是安装包,而是镜像(image)镜像中不仅包含了MySQL本身,还包含了其运行所需要的环境、配置、系统级函数库。因此它在运行时就有自己独立的环境,就可以跨系统运行,也不需要手动再次配置环境了。这套独立运行的隔离环境我们称为容器(container)
解读:
docker run -d
:创建并运行一个容器,-d
则是让容器以后台进程运行--name mysql
: 给容器起个名字叫mysql
,你可以叫别的-p 3306:3306
: 设置端口映射
- 容器是隔离环境,外界不可访问。但是可以将宿主机端口映射容器内到端口,当访问宿主机指定端口时,就是在访问容器内的端口了。
- 容器内端口往往是由容器内的进程决定,例如 MySQL 进程默认端口是 3306,因此容器内端口一定是 3306;而宿主机端口则可以任意指定,一般与容器内保持一致。
- 格式:
-p 宿主机端口:容器内端口
,示例中就是将宿主机的 3306 映射到容器内的 3306 端口(有多个mysql容器就可以设置3307,3308)-e TZ=Asia/Shanghai
: 配置容器内进程运行时的一些参数
- 格式:
-e KEY=VALUE
,KEY和VALUE都由容器内进程决定- 案例中,
TZ=Asia/Shanghai
是设置时区;MYSQL_ROOT_PASSWORD=123
是设置 MySQL 默认密码mysql
: 设置镜像名称,Docker会根据这个名字搜索并下载镜像
- 格式:
REPOSITORY:TAG
,例如mysql:8.0
,其中REPOSITORY
可以理解为镜像名,TAG
是版本号- 在未指定
TAG
的情况下,默认是最新版本,也就是mysql:latest
# 用基本命令,寻找 Networks.bridge.IPAddress 属性
docker inspect mysql
这个 ip 地址是对外隔离的
链接 docker 创建的 mysql:
mysql -h 172.0.0.1 -P 3306 -u root -p
输入密码 123
在外网访问时,是访问不到 docker 的 mysql 的 IP 172.17.0.2 的,所以直接访问服务器地址,3306 端口 映射 到 172.17.0.2:3306
常见命令
docker 镜像仓库
Docker Hub Container Image Library | App Containerization
数据卷(volume)
挂载数据卷
数据卷(volume)是一个虚拟目录,是 容器内目录 与 宿主机目录 之间映射的桥梁
存放数据卷的目录:/var/lib/docker/volumes
命令 | 说明 | 文档地址 |
---|---|---|
docker volume create | 创建数据卷 | docker volume create |
docker volume ls | 查看所有数据卷 | docs.docker.com |
docker volume rm | 删除指定数据卷 | docs.docker.com |
docker volume inspect | 查看某个数据卷的详情 | docs.docker.com |
docker volume prune | 清除数据卷 | docker volume prune |
inspect v.检查,审视;检阅,视察;进行检查,进行视察
一般在创建容器的时候指定数据卷的挂载
docker run -d --name nginx -p 80:80 -v html:/usr/share/nginx/html nginx
html
是数据卷的名字数据卷挂载的容器目录
/usr/share/nginx/html
(这里使用Nginx,端口号默认80)
这样实现了 双向绑定
挂载本地目录或文件
数据卷的目录结构较深,如果我们去操作数据卷目录会不太方便。在很多情况下,我们直接将容器目录与宿主机指定目录挂载。挂载语法与数据卷类似:
# 挂载本地目录
-v 本地目录:容器内目录
# 挂载本地文件
-v 本地文件:容器内文件
注意:本地目录或文件必须以
/
或./
开头,如果直接以名字开头,会被识别为数据卷名而非本地目录名
docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
-v /root/mysql/data:/var/lib/mysql \
-v /root/mysql/conf:/etc/mysql/conf.d \
-v /root/mysql/init:/docker-entrypoint-initdb.d \
mysql
服务器用的是数据卷
镜像
docker 的镜像是分层的:
已经存在的层,再去 pull,就会省略
指令 | 说明 | 示例 |
---|---|---|
FROM | 指定基础镜像 | FROM centos:6 |
ENV | 设置环境变量,可在后面指令使用 | ENV key value |
COPY | 拷贝本地文件到镜像的指定目录 | COPY ./xx.jar /tmp/app.jar |
RUN | 执行Linux的shell命令,一般是安装过程的命令 | RUN yum install gcc |
EXPOSE | 指定容器运行时监听的端口,是给镜像使用者看的 | EXPOSE 8080 |
ENTRYPOINT | 镜像中应用的启动命令,容器运行时调用 | ENTRYPOINT java -jar xx.jar |