目录
一.概念
1.Docker:包含一个后台服务,利用docker命令来快速部署指定应用。
2.镜像:镜像包含应用本身,以及其运行环境、配置、系统级函数库。(免安装版本)
3.容器:独立环境,镜像在容器中运行。有自己的网络,对外不开放。
二.基础命令
# 第1步,去DockerHub查看nginx镜像仓库及相关信息
# 第2步,拉取Nginx镜像
docker pull nginx
# 第3步,查看镜像
docker images
# 结果如下:
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 605c77e624dd 16 months ago 141MB
mysql latest 3218b38490ce 17 months ago 516MB
# 第4步,创建并允许Nginx容器
docker run -d --name nginx -p 80:80 nginx
# 第5步,查看运行中容器
docker ps
# 也可以加格式化方式访问,格式会更加清爽
docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"
# 第6步,访问网页,地址:http://虚拟机地址
# 第7步,停止容器
docker stop nginx
# 第8步,查看所有容器
docker ps -a --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"
# 第9步,再次启动nginx容器
docker start nginx
# 第10步,再次查看容器
docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"
# 第11步,查看容器详细信息
docker inspect nginx
# 第12步,进入容器,查看容器内目录
docker exec -it nginx bash
# 或者,可以进入MySQL
docker exec -it mysql mysql -uroot -p
# 第13步,删除容器
docker rm nginx
# 发现无法删除,因为容器运行中,强制删除容器
docker rm -f nginx
# Docker容器开机自启
docker update --restart=always [容器名/容器id]
# 修改/root/.bashrc文件 命令起别名
vi /root/.bashrc
source /root/.bashrc
三.文件/目录挂载
挂载:容器目录与宿主机目录,形成映射。
目的:为了避免容器目录直接指向宿主机目录,构成强耦合,切换环境就无法正常运行。
命令:
默认情况下, /var/lib/docker/volumes
存放容器数据卷的目录,其下再根据数据卷名称创建新目录,格式为/数据卷名/_data
。
容器一旦创建完成,就无法修改数据卷。未指定数据卷,则自动创建。
方便起见,常常将容器目录与本地目录挂载。 / 或 ./ 开头
# 挂载本地目录 -v 本地目录:容器内目录
# 挂载本地文件 -v 本地文件:容器内文件
四.构建镜像
镜像结构:
Dockerfile:记录镜像结构的文件
#依据指定Dockerfile构建镜像
docker build -t [repository:tag] [Dockerfile目录]
五.容器网络互连
默认情况下,所有容器都以bridge方式连到Docker的一个虚拟网桥
问题:
容器之间本身是可以互连的,通过ip地址。
但容器的IP地址是虚拟的,会发生变化。
解决:在同一个自定义网络中,各容器才可通过容器别名互联
六.项目部署
1.配置文件采用多环境配置,本地运行配置与Docker部署配置。地址为变量,不同环境不同值,docker部署时,值为容器的网络名。
2. 挂载文件//目录
3.各容器加入同一个自定义网络
DockerCompose
它允许用户通过一个单独的 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器。
docker-compose.yml需要设置的 参数与docker run 相似。
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"
networks:
- new
networks:
new:
name: hmall
compose命令
docker compose [OPTIONS] [COMMAND]
docker安装
使用阿里云更新yum源:
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
安装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 fast
安装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
配置镜像加速
# 创建目录
mkdir -p /etc/docker# 复制内容,注意把其中的镜像加速地址改成你自己的
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://docker.fxxk.dedyn.io"
]
}
EOF# 重新加载配置
systemctl daemon-reload# 重启Docker
systemctl restart docker