安装Docker

1. 卸载已有的Docker

yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine \
docker-selinux

2. 配置yum源

  1. 安装yum工具
yum install -y yum-utils device-mapper-persistent-data lvm2
  1. 配置yum源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3. 安装Docker

yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

几个常见的错误

  1. 报错
    34a3e7528a934f21825bf1f8a34323d8.png
    /etc/yum.repos.d/路径下的配置文件里,看看是否有中文注释,删了中文注释就行了
  2. 报错
    e1a02af7f0aa4453a937726202221c4c.png
    资源文件放到指定的路径(/opt/centos/repodata/)下就行了
  3. 安装docker时报错:
    6611d9b24eb243cbb3d07b54e6264c6b.png
    解决办法:安装docker-ce-selinux
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

4. 启动和校验

# 启动Docker
systemctl start docker

# 停止Docker
systemctl stop docker

# 重启
systemctl restart docker

# 设置开机自启
systemctl enable docker

# 执行docker ps命令,如果不报错,说明安装启动成功
docker ps

5. 配置镜像加速

  1. 打开阿里云的容器镜像服务
  2. 点击管理控制台:
    e8410e441042494ab55665d37348a253.png
  3. 按照步骤配置镜像加速器即可。
    2ae0900d88e241afa8e20eb46d605fe0.jpeg
    e2dda10e3182492b9bba6c80db438609.png
    原因:现在阿里云的镜像已经停用失效,导致网络无法访问。
    解决:可以修改配置文件:
{
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.1panel.live/"
]
}

重新加载配置文件并重启docker:

sudo systemctl daemon-reload
sudo systemctl restart docker

镜像和容器

利用Docker安装应用时,Docker会自动搜索并下载镜像image)。镜像包含了:应用本身、应用运行所需的环境、配置、系统函数库。Docker会在运行镜像时创建一个隔离环境,成为容器container
镜像仓库:存储和管理镜像的平台。
镜像帮助文档dockerHub

部署Mysql

docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
--restart=always \
mysql:5.7.32
  • docker run:创建并运行一个容器
  • -d:让容器在后台运行
  • –name:给容器起名,必须唯一
  • -p:设置端口映射【宿主机 : 容器内】
  • -e:设置环境变量
  • –restart=always:设置开机自启
  • mysql:5.7.32:指定运行的镜像名[镜像名]:[版本](版本省略就默认是最新版)

常见命令

b9244ef79a834c888e55732c87abae93.png

docker run:创建并运行容器
docker start:启动容器,但是不会创建容器
docker exec -it 容器名 bash:进入容器内部

给docker ps和docker images命令取个别名

  1. 进入.bashrc文件:vim ~/.bashrc
  2. 起别名:
alias dps='docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"'
alias dis='docker images'
  1. 让修改的文件生效:source ~/.bashrc

数据卷挂载

数据卷(volume)是一个虚拟目录,是容器内目录宿主机目录之间映射的桥梁。(是个双向映射)
80dca7e55e50465584a5bed7fd485c55.png
2b47c6a8ab464ab9bf2787b665d2a36d.png

  1. 在执行docker run命令,使用-v 数据卷:容器内目录,可以完成数据卷的挂载。
  2. 当创建容器时,如果挂载了数据卷,且数据卷不存在,会自动创建数据卷。

本地目录挂载

  1. 在执行docker run命令,使用-v 本地目录:容器内目录,可以完成本地目录的挂载。
  2. 本地目录必须以 / 或 ./ 开头,如果直接以名称开头,会被识别成数据卷而非本地目录。
docker run -d \
--name mysql \
-p 3307:3306 \
-v /root/mysql/data:/var/lib/mysql \
-v /root/mysql/init:/docker-entrypoint-initdb.d \
-v /root/mysql/conf:/etc/mysql/conf.d \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
--restart=always \
mysql:5.7.32

自定义镜像

镜像包含了应用程序、程序运行的系统函数库、运行配置等文件的文件包。构建镜像的过程实际上就是把上述文件打包的过程。

镜像结构

46fd11e845e64b2cae8325cb6b53118e.png

Dockerfile

Dockerfile就是一个文本文件,其中包含一个个的指令,用指令来说明要执行什么操作来构建镜像。
6e0455e392ae441384b8361d201a7680.png

构建镜像

docker build -t myImage:1.0 .
  • -t:给镜像起名,格式:[镜像名]:[版本](不指定版本默认为latest)
  • . :指定Dockerfile所在目录,如果在当前目录就指定为“.”

网络

默认情况下,所有容器都是以bridge方式连接到Docker的一个虚拟网桥上。
7602a42ae6804609bdfa2436d6f2d9ce.png

Docker的网络操作命令

加入自定义网络的容器才可以通过容器名互相访问。
d01da4c991094d4b8f93ccfab81d5b03.png

把容器加入网络的两种方式:
先创建容器,再把容器加入网桥:docker network connect 网络名 容器名
创建容器的同时把容器加入网桥:docker run -d .... --network 网络名 ...

项目部署

后端部署

  1. 打包项目
    815202303137461c8e76def8f5579d1c.png
  2. 把打包好的jar包Dockerfile文件一起丢到服务器上
    af5776419de44941aab52b5256069fa8.png
  3. 切换到/root/hm目录下,构建自定义镜像hm-java:docker build -t hm-java:1.0 .
    87c818023be948d3b074c189292c8d8c.png
  4. 创建并运行容器,同时把容器加入网桥:docker run -d --name hm-java -p 8080:8080 --network lsh hm-java:1.0
    ec70f4a7666e4af3a3fec5e6cf8c877a.png

部署前端

  1. 准备好静态资源配置文件
    d7380915e3224e3090d4e97bced881bd.png
  2. 创建容器并挂载
docker run -d \
--name nginx \
-p 18080:18080 \
-p 18081:18081 \
-v /root/nginx/html:/usr/share/nginx/html \
-v /root/nginx/nginx.conf:/etc/nginx/nginx.conf \
--network lsh \
nginx

DockerCompose

通过一个独立的docker-compose.yml模板文件(yaml格式)来定义一组相关联的应用容器,帮助我们实现多个关联的Docker容器的快速部署。
d8c05b0d94c9419f8f1f6eeb80ee7726.png
e158bb3d266d49e6ac949769a14fd4d5.png
docker-compose.yml文件:

version: "3.8"

services:
mysql:
image: mysql
container_name: mysql
ports:
- "3306:3306"
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: 123
volumes:
- "./mysql/conf:/etc/mysql/conf.d"
- "./mysql/data:/var/lib/mysql"
- "./mysql/init:/docker-entrypoint-initdb.d"
networks:
- hm-net
hmall:
build:
context: .
dockerfile: Dockerfile
container_name: hmall
ports:
- "8080:8080"
networks:
- hm-net
depends_on:
- mysql
nginx:
image: nginx
container_name: nginx
ports:
- "18080:18080"
- "18081:18081"
volumes:
- "./nginx/nginx.conf:/etc/nginx/nginx.conf"
- "./nginx/html:/usr/share/nginx/html"
depends_on:
- hmall
networks:
- hm-net
networks:
hm-net:
name: hmall

docker compose的命令格式:
802e0738aabe48518c52f5ed8d674d65.png