1.初识 Docker
1.1.什么是 Docker
1.1.1.应用部署的环境问题
1.1.2.Docker 解决依赖兼容问题
1.1.3.Docker 解决操作系统环境差异
1.1.4.小结
1.2.Docker 和虚拟机的区别
1.3.Docker 架构
1.3.1.镜像和容器
1.3.2.DockerHub
1.3.3.Docker 架构
1.3.4.小结
1.4.安装 Docker
1)卸载(可选)
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine \
docker-ce
2)安装 docker
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2 --skip-broken
# 设置docker镜像源
yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
yum makecache fast
yum install -y docker-ce
3)启动 docker
# 关闭
systemctl stop firewalld
# 禁止开机启动防火墙
systemctl disable firewalld
systemctl start docker # 启动docker服务
systemctl stop docker # 停止docker服务
systemctl restart docker # 重启docker服务
然后输入命令,可以查看 docker 版本:
docker -v
4)配置镜像加速
2.Docker 的基本操作
2.1.镜像操作
2.1.1.镜像名称
2.1.2.镜像命令
2.1.3.案例1-拉取、查看镜像
2.1.4.案例2-保存、导入镜像
docker save --help
docker save -o [保存的目标文件名称] [镜像名称]
docker save -o nginx.tar nginx:latest
docker rmi nginx:latest
docker load -i nginx.tar
2.2.容器操作
2.2.1.容器相关命令
2.2.2.案例-创建并运行一个容器
docker run --name containerName -p 80:80 -d nginx
2.2.3.案例-进入容器,修改文件
docker exec -it mn bash
cd /usr/share/nginx/html
sed -i -e 's#Welcome to nginx#传智教育欢迎您#g' -e 's#<head>#<head><meta charset="utf-8">#g' index.html
2.2.4.小结
2.3.数据卷(容器数据管理)
2.3.1.什么是数据卷
2.3.2.数据集操作命令
docker volume [COMMAND]
2.3.3.创建和查看数据卷
docker volume create html
docker volume ls
docker volume inspect html
2.3.4.挂载数据卷
docker run \
--name mn \
-v html:/root/html \
-p 8080:80
nginx \
2.3.5.案例-给 nginx 挂载数据卷
docker run --name mn -v html:/usr/share/nginx/html -p 80:80 -d nginx
# 查看html数据卷的位置
docker volume inspect html
# 进入该目录
cd /var/lib/docker/volumes/html/_data
# 修改文件
vi index.html
2.3.6.案例-给 MySQL 挂载本地目录
docker run \
--name mysql\
-e MYSOL_ROOT_PASSWORD=123 \
-p 3306:3306 \
-v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf \
-v /tmp/mysql/data:/var/1ib/mysql \
-d \
mysql:5.7.25
2.3.7.小结
3.Dockerfile 自定义镜像
3.1.镜像结构
3.2.Dockerfile 语法
3.3.构建Java项目
3.3.1.基于 Ubuntu 构建 Java 项目
# 指定基础镜像
FROM ubuntu:16.04
# 配置环境变量,JDK的安装目录
ENV JAVA_DIR=/usr/local
# 拷贝jdk和java项目的包
COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /tmp/app.jar
# 安装JDK
RUN cd $JAVA_DIR \
&& tar -xf ./jdk8.tar.gz \
&& mv ./jdk1.8.0_144 ./java8
# 配置环境变量
ENV JAVA_HOME=$JAVA_DIR/java8
ENV PATH=$PATH:$JAVA_HOME/bin
# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar
docker build -t javaweb:1.0 .
3.3.2.基于 java8 构建 Java 项目
FROM java:8-alpine
COPY ./app.jar /tmp/app.jar
EXPOSE 8090
ENTRYPOINT java -jar /tmp/app.jar
3.4.小结
4.Docker-Compose
4.1.初识DockerCompose
version: "3.8"
services:
mysql:
image: mysql:5.7.25
environment:
MYSQL_ROOT_PASSWORD: 123
volumes:
- "/tmp/mysql/data:/var/lib/mysql"
- "/tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf"
web:
build: .
ports:
- "8090:8090"
4.2.安装 DockerCompose
4.3.部署微服务集群
4.3.1. compose文件
version: "3.2"
services:
nacos:
image: nacos/nacos-server
environment:
MODE: standalone
ports:
- "8848:8848"
mysql:
image: mysql:5.7.25
environment:
MYSQL_ROOT_PASSWORD: 123
volumes:
- "$PWD/mysql/data:/var/lib/mysql"
- "$PWD/mysql/conf:/etc/mysql/conf.d/"
userservice:
build: ./user-service
orderservice:
build: ./order-service
gateway:
build: ./gateway
ports:
- "10010:10010"
FROM java:8-alpine
COPY ./app.jar /tmp/app.jar
ENTRYPOINT java -jar /tmp/app.jar
4.3.2.修改微服务配置
spring:
datasource:
url: jdbc:mysql://mysql:3306/cloud_order?useSSL=false
username: root
password: 123
driver-class-name: com.mysql.jdbc.Driver
application:
name: orderservice
cloud:
nacos:
server-addr: nacos:8848 # nacos服务地址
4.3.3.打包
<build>
<!-- 服务打包的最终名称 -->
<finalName>app</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
4.3.4.拷贝jar包到部署目录
4.3.5.部署
docker-compose up -d
5.Docker镜像仓库
5.1.搭建私有镜像仓库
5.2.推送、拉取镜像
docker tag nginx:latest 192.168.150.101:8080/nginx:1.0
docker push 192.168.150.101:8080/nginx:1.0
docker pull 192.168.150.101:8080/nginx:1.0