1.安装Docker
一篇文章完成Centos7安装docker-CSDN博客
Docker的安装_docker安装-CSDN博客
注意由于目前监管下架了dockerhub镜像,我们需要配置自己的镜像才能正常使用docker
1
2
3
4
5
6
7
8
9
10
11
12
|
临时使用:docker pull docker.unsee.tech/istio/distroless
长期有效:
修改文件 vim /etc/docker/daemon.json
(如果不存在则需要创建创建,注意不要写入中文,要带https://),并重启服务,最好只写一条就行
太多了在重启docker时容易报错
[root@centos8 docker]# cat daemon.json
{
"registry-mirrors":["https://docker.unsee.tech"]
}
sudo systemctl restart docker.service
ping -c 3 docker.unsee.tech
|
1.1.查看本地yum镜像源地址
1
2
3
4
5
6
|
cd /etc/yum.repos.d
ll
###没用文件执行以下命令
mkdir /etc/yum.repos.d
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo
|
1.2.设置docker镜像仓库
1
2
3
4
5
|
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo(阿里仓库)
yum-config-manager --add-repo http://download.docker.com/linux/centos/docker-ce.repo(中央仓库)
|
1.3.安装Docker
1
2
3
4
|
docker --version 查看版本
systemctl start docker / systemctl start docker.service
sudo systemctl status docker.service
docker images 查看镜像
|
1.4.阿里云配置镜像加速
登录阿里云,找到产品—容器—容器镜像服务

没开通可以先开通(免费的)选择镜像工具,选择镜像加速器

1
2
3
4
5
6
7
8
9
10
|
只需要复制以上内容在centos上安装即可
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://q8o10ocs.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
|
2.Docker使用—部署Mysql数据库
部署Mysql,前提条件,停掉虚拟机中的Mysql服务,确保网络正常
1
2
3
4
5
6
7
8
9
10
11
12
|
启动docker后直接执行以下命令
docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
mysql
可以多次运行此条命令只需要将名字和端口更改就能实现mysql集群效果
docker ps 查看是否启动成功
docker inspect mysql 查看mysql容器
|

直接使用navicat链接数据库
1
2
|
ip地址为Linux虚拟机IP
账号密码为root:123
|


http://hub.docker.com/ docker镜像仓库地址
2.1.命令解读
1
2
3
4
5
6
7
8
9
10
11
12
|
docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
mysql
docker run:创建并运行一个容器,-d是让容器在后台运行
--name:给名字起名字,必须唯一
-p:端口映射 -p 3306:3306 前面是宿主机端口后面是容器端口
-e:Key=Value 是设置环境变量
mysql:指定运行镜像名字,镜像命名规范:由镜像名和版本组成,默认版本为latest,代表最新版
|
3.Docker基础
3.1.Docker常见命令
https://docs.docker.com/ 官方文档
1
2
3
4
5
6
7
8
9
10
11
|
docker pull xxx //拉去镜像
docker images //查看本地所有镜像
docker rmi xxx //删除镜像
docker push //推送镜像(共享传递)
docker run //创建并运行容器
docker stop //停止容器
docker start //启动容器(启动进程,并不会创建新容器)
docker ps //查看容器运行状态
docker rm //删除容器
docker logs //查看docker运行日志
docker exec //进入容器内部
|

3.1.1.案例:拉取Nginx镜像,创建并运行Nginx容器

1
2
3
4
5
|
docker pull nginx //拉取镜像
docker images //查看本地所有镜像
docker sava -o nginx.tar nginx:latest //保存镜像
docker rmi nginx:latest //删除刚刚拉取的镜像
docker load -i nginx.tar //导入nginx镜像
|

1
2
3
4
5
6
7
8
|
docker run -d --name nginx -p 80:80 nginx 运行nginx容器
docker ps -a //-a查看所有容器 默认查看运行中容器
# 也可以加格式化方式访问,格式会更加清爽
docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"
docker stop nginx
docker logs nginx //查看nginx日志
docker exec -it nginx bash //进入容器内部使用命令行交互
docker rm nginx //删除容器,先停止才能删除或者使用-f强制删除
|
3.2.Docker数据卷
3.2.1.利用Nginx容器部署静态资源并修改资源
1
2
3
4
5
6
|
docker run -d --name nginx -p 80:80 nginx
docker exec -it nginx bash //进入容器内部
cd /usr/share/nginx/html
vi index.html //command not found
docker容器内只会部署最基础的命令,vi等命令不会添加,需要利用数据卷来解决
|

3.2.2.数据卷
数据卷(volume)是一个虚拟目录,是容器内目录与宿主机目录之间映射的桥梁。


1
2
3
4
5
|
docker rm -f nginx 使用数据卷挂载时需要先删除已有的nginx
docker run -d --name nginx -p 80:80 -v html:/usr/share/nginx/html nginx
-v参数表示启动时挂载数据卷 -v数据卷名:需要挂载的路径
docker volume inspect html //查看数据卷详情,查看映射过来的宿主机目录
cd /var/lib/docker/volumes/html/_data
|

3.2.3.mysql容器的数据挂载

1
2
3
4
5
6
7
8
9
|
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/init:/docker-entrypoint-initdb.d \
-v /root/mysql/conf:/etc/mysql/conf.d \
mysql
|
现在root目录下创建mysql文件夹,在mysql文件夹下创建3个文件夹,用于本地存储mysql数据
文件夹下存放数据

3.3.Docker自定义镜像
镜像是分层的,对每一层压缩打包就能部署好

3.3.1.DockerFile语法


1
2
3
4
5
6
|
编写好Dockerfile后,可以利用以下语法构建镜像
docker build -t myImage:1.0 .
-t:是给镜像起名,格式依然是repository:tag的格式,不指定tag时,默认为latest
.:是指定Dockerfile所在目录,如果就在当前目录则指定为"."
|
3.3.2.案例—自定义镜像
1
2
3
4
5
6
7
8
9
|
# 基础镜像
FROM openjdk:11.0-jre-buster
# 设定时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 拷贝jar包
COPY docker-demo.jar /app.jar
# 入口
ENTRYPOINT ["java", "-jar", "/app.jar"]
|
将写好的dockerfile和生成的jar包打包好

导入openjdk:11.0-jre

1
|
docker build -t docker-demo .
|

1
|
docker run -d --name dd -p 8080:8080 docker-demo 运行镜像
|
成功访问

3.4.Docker网络

加入自定义网络的容器才可以通过容器名互相访问,Docker的网络操作命令如下

3.4.1.自定义网络
1
2
|
docker network create heima 自定义一个名为黑马的网卡
docker network ls 查看docker所有网卡
|

1
2
|
docker network connect heima mysql //将mysql添加一张heima网卡,容器存在连接
docker inspect mysql //查看mysql网卡信息
|

1
2
|
docker run -d --name dd -p 8080:8080 --network heima docker-demo
容器启动时添加并绑定网卡信息
|
4.部署Java项目
4.1.部署后端
4.2.部署前端

1
2
3
4
5
6
7
8
|
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 heima \
nginx
|
5.DockerCompose
使用Docker部署需要部署前端后端数据库还需要配置在统一网络下,非常麻烦和不方便
Docker Compose通过一个单独的docker-compose.yml模板文件(YAML格式)来定义一组相关联的应用容器,帮助我们实现多个相互关联的Docker容器的快速部署。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
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
|

1
|
docker compose up -d //构建时注意路径
|
