准备环境:
- VMware17
- Ubuntu18.04(LTS):https://releases.ubuntu.com/18.04/ubuntu-18.04.6-desktop-amd64.iso
1. Docker前瞻
docker相关文档:
- docker官网地址 : https://www.docker.com/
- docker文档地址 : https://docs.docker.com/
- docker镜像仓库 : https://hub.docker.com/
1、docker是什么:它是一个开源的容器引擎,可以方便管理容器,而且容器采用沙箱机制相互隔离。
2、docker解决什么问题:解决软件环境的迁移问题。
3、容器和虚拟机的区别:
- 容器:是应用程序的抽象(把代码和依赖关系打包在一起),占用资源更少,启动速度快,轻巧灵活。
- 虚拟机:是对物理硬件的抽象(将一台服务器变成多台服务器),占用资源多,笨重强大。
4、docker存储:
- 挂载目录,示例:
-v /宿主机目录:容器目录
- 数据卷映射,示例:
数据卷:容器目录
5、docker网络:创建自定义网络,实现主机名作为稳定域名访问。(可以让相同网络容器可以互相通信)
#示例
#自定义网络
docker network create mynet
#主节点
docker run -d -p 6379:6379 \
-v /app/rd1:/bitnami/redis/data \
-e REDIS_REPLICATION_MODE=master \
-e REDIS_PASSWORD=123456 \
--network mynet --name redis01 \
bitnami/redis
#从节点
docker run -d -p 6380:6379 \
-v /app/rd2:/bitnami/redis/data \
-e REDIS_REPLICATION_MODE=slave \
-e REDIS_MASTER_HOST=redis01 \
-e REDIS_MASTER_PORT_NUMBER=6379 \
-e REDIS_MASTER_PASSWORD=123456 \
-e REDIS_PASSWORD=123456 \
--network mynet --name redis02 \
bitnami/redis
2. 安装Docker
本文基于ubuntu环境安装,如果缺权限的话 前面加个sudo即可。
1、关闭防火墙(后续对外访问就不需要手动暴露端口了,方便测试)
sudo ufw disable
#关闭防火墙:sudo ufw disable
#查看防火墙状态:sudo ufw status
#开启防火墙:sudo ufw enable
2、安装docker
#卸载旧版docker
sudo apt-get remove docker docker-engine docker.io containerd runc
#更新软件包
sudo apt-get update
#安装一些工具
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
#安装docker
sudo apt install docker.io
#验证dokcer是否安装成功
docker --version
#启动& 开机启动docker; enable + start 二合一
sudo systemctl enable docker --now
#配置阿里云镜像加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com"]
}
EOF
#重新加载配置
sudo systemctl daemon-reload
#重启docker服务
sudo systemctl restart docker
3. Docker常用命令
1、docker服务的状态管理:
- systemctl status docker:查看docker的运行状态
- systemctl stop docker:关闭docker
- systemctl start docker:启动docker
- systemcl restart docker:重启docker
- systemctl enable docker:设置docker为开机自启
2、docker镜像管理:
- 搜索镜像:docker search 镜像名
- 拉取镜像:docker pull 镜像名:tag 如果不指定tag会拉取lastest
- 查看镜像:docker images
- 删除镜像:docker rmi 镜像名:tag
3、docker容器管理:
- 创建容器:docker run -di --name=容器名 镜像名:tag
- 关闭容器:docker stop 容器名
- 启动容器:docker start 容器名
- 删除容器:docker rm 容器名
- 查看容器:
- docker ps -a 查看所有容器,包括未运行的
- docker ps 查看正在运行的容器
- 进入容器:docker exec -it 容器名 /bin/bash
4、docker的数据卷:
-
数据卷:是被docker管理的文件夹。
-
数据卷的用处:可以把数据卷和 某个容器里的路径进行绑定, 实现容器与宿主机之间文件的双向自动传输
把文件放到宿主机的数据卷里:docker会自动把文件同步到容器里
容器里的文件有变化:docker会自动同步到宿主机的数据卷里
-
数据卷操作命令:
列出数据卷:docker volume ls
创建数据卷:docker volume create 数据卷名称
查看数据卷详情(实际路径):docker volume inspect 数据卷名称
删除数据卷:docker volume rm 数据卷名称
-
创建容器并绑定数据卷:
docker run -di --name=容器名 -v 数据卷名:容器里的路径 镜像名:tag
docker run -di --name=容器名 -v 宿主机里的路径:容器里的路径 镜像名:tag
注意:-v参数里的路径,全部都得是 绝对路径
5、镜像备份:
- 导出镜像:docker save -o 文件名称 镜像名称
- 加载镜像:docker load -i xxx.tar
4. Dockerfile
文档:https://docs.docker.com/reference/dockerfile/
Dockerfile作用:制作自定义镜像。
Dockerfile它是以一种基础镜像为基础,编写一系列的docker指令,每条指令构建一层镜像,通过这些指令一层层最终构建出一个目标镜像出来。
常见指令 | 作用 |
---|---|
FROM | 指定镜像基础环境 |
RUN | 运行自定义命令 |
CMD | 容器启动命令或参数 |
LABEL | 自定义标签 |
EXPOSE | 指定暴露端口 |
ENV | 环境变量 |
ADD | 添加文件到镜像 |
COPY | 复制文件到镜像 |
ENTRYPOINT | 容器固定启动命令 |
VOLUME | 数据卷 |
USER | 指定用户和用户组 |
WORKDIR | 指定默认工作目录 |
ARG | 指定构建参数 |
示例:
#编写dockerfile文件
vim Dockerfile
FROM openjdk:17
LABEL author=aopmin
COPY app.jar /app.jar #把jar包复制到容器的根目录下
EXPOSE 8080
ENTRYPOINT ["java","-jar","app.jar"] #运行命令
# 构建镜像
docker bulid -f Dockerfile -t 镜像名:tag .
5. 服务编排
服务编排或容器编排:按照一定的业务规则批量管理容器。
Docker Compose是一个用于定义和运行多个Docker容器的编排工具。
可以一条命令启动多个容器。主要是解决了容器与容器之间如何管理编排的问题。
使用Docker Compose 有三个步骤:
- 利用Dockerfile定义运行环境(如果已有镜像,可省略这一步)
- 使用
docker-compose.yml
定义组成应用的各服务 - 运行
docker-compose up -d
启动应用
安装docker-compose:
# 下载docker compose
curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# 设置权限
chmod +x /usr/local/bin/docker-compose
# 查看版本
docker-compose -version
如果要卸载docker-compose,可执行如下命令:
# docker compose是二进制包方式安装的,删除二进制文件即可
rm /usr/local/bin/docker-compose
docker-compose常用命令:
# !!!注意:必须先切换到`docker-compose.yaml`文件所在的目录后,才可以执行以下命令!!!
#创建容器并后台启动
docker-compose up -d
#直接启动容器
docker-compose start
#其它命令:
docker-compose help # 查看帮助
docker-compose stop # 停止容器
docker-compose start # 启动容器
docker-compose restart # 重启容器
docker-compose rm # 删除已停止的容器
docker-compose down # 停止并删除容器
示例:
1、创建docker-compose目录
mkdir ~/docker-compose
cd ~/docker-compose
2、编写docker-compose.yaml
文件
version: "3.0"
services:
redis:
container_name: redis
image: redis:5.0
ports:
- 6379:6379
nginx:
container_name: nginx
image: nginx:1.14.2
ports:
- 80:80
volumes:
- /root/volumes/nginx/html:/usr/share/nginx/html
tomcat:
container_name: tomcat
image: tomcat:8.5.88
ports:
- 8080:8080
volumes:
- /root/volumes/tomcat/webapps:/usr/local/tomcat/webapps
3、启动
# !!!注意:必须先切换到有`docker-compose.yaml`文件所在的目录后,才可以执行以下命令!!!
cd ~/docker-compose
# docker-compose up -d 以守护进程方式创建并启动容器
docker-compose up -d