1. *docker*
1.1 *什么是docker*
docker是快速构建、运行、管理应用的工具,简单来就是来帮助部署项目以及部署项目需要的一些组件的工具。
1.2 *卸载旧版*
首先如果系统中已经存在旧的docker,则先卸载:
yum remove docker
docker-client
docker-client-latest
docker-common
docker-latest
docker-latest-logrotate
docker-logrotate
docker-engine
docker-selinux
1.3 *配置docker yum源库*
1.3.1 *安装yum 源工具*
执行yum install -y yum-utils命令,报以下错误。
原因:是因为centos7在024年6月份停止维护,导致默认镜像不能使用,更改镜像即可,详见以下网址更改镜像。
网址:https://developer.aliyun.com/mirror/centos?
再执行:yum install -y yum-utils
1.3.2 *配置docker yum源*
yum源工具安装成功后,执行此命令:
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
uploading-image-16926.png
更新yum源,建立缓存
sudo yum makecache fast
1.3.3 *安装docker*
安装docker引擎、docker引擎的命令行程序、docker运行时的容器环境、docker构建镜像的工具、docker做批量操作的工具。
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
安装完成后可以使用docker -v命令查看版本号
1.3.4 *启动和校验*
启动docker
systemctl start docker
停止docker
systemctl stop docker
重启
systemctl restart docker
设置开机自启
systemctl enable docker
执行docker ps命令,如果不报错,说明安装启动成功
docker ps
2. *配置镜像加速*
2.1 *注册阿里云账号*
首先访问阿里云网站:https://www.aliyun.com/,注册一个账号。
2.2 *开通镜像服务*
在首页的产品中,找到阿里云的容器镜像服务:
点击后进入控制台:
首次可能需要选择立刻开通,然后进入控制台。
2.3 *配置镜像加速*
找到镜像工具下的镜像加速器:
页面向下滚动,即可找到配置的文档说明:
具体命令如下:
创建目录
mkdir -p /etc/docker
复制内容,注意把其中的镜像加速地址改成你自己的,执行此命令可自动配daemon.json文件,执行此命令
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://4iydscvo.mirror.aliyuncs.com",
"https://docker.anyhub.us.kg",
"https://docker.ckyl.me"
]
}EOF
此外也可手动配置
# 重新加载配置
systemctl daemon-reload
# 重启docker
systemctl restart docker
此外找了一些加速器地址
{
"registry-mirrors": [
"http://hub-mirror.c.163.com",
"https://mirrors.tuna.tsinghua.edu.cn",
"http://mirrors.sohu.com",
"https://ustc-edu-cn.mirror.aliyuncs.com",
"https://ccr.ccs.tencentyun.com",
"https://docker.m.daocloud.io",
"https://docker.awsl9527.cn"
]
}
3. *docker命令快速部署mysql*
使用docker命令快速部署mysql:
docker run -d
--name mysql
-p 3306:3306
-e TZ=Asia/Shanghai
-e MYSQL_ROOT_PASSWORD=123
mysql
通过任意客户端连接mysql
镜像只需要下载一次,可多次使用
docker run -d
--name mysql2
-p 3307:3306
-e TZ=Asia/Shanghai
-e MYSQL_ROOT_PASSWORD=123
mysql
命令解读:
docker run -d :创建并运行一个容器,-d则是让容器以后台进程运行
--name mysql : 给容器起个名字叫mysql,也可以叫别的
-p 3306:3306 : 设置端口映射。
容器是隔离环境,外界不可访问。但是可以将宿主机端口映射容器内到端口,当访问宿主机指定端口时,就是在访问容器内的端口了。
容器内端口往往是由容器内的进程决定,例如MySQL进程默认端口是3306,因此容器内端口一定是3306;而宿主机端口则可以任意指定,一般与容器内保持一致。
格式: -p 宿主机端口:容器内端口,示例中就是将宿主机的3306映射到容器内的3306端口
-e TZ=Asia/Shanghai : 配置容器内进程运行时的一些参数
格式:-e KEY=VALUE,KEY和VALUE都由容器内进程决定
案例中,TZ=Asia/Shanghai是设置时区;MYSQL_ROOT_PASSWORD=123是设置MySQL默认密码
mysql : 设置镜像名称,docker会根据这个名字搜索并下载镜像
格式:REPOSITORY:TAG,例如mysql:8.0,其中REPOSITORY可以理解为镜像名,TAG是版本号,在未指定TAG的情况下,默认是最新版本,也就是mysql:latest
4. *镜像和容器*
当我们利用docker安装应用时,docker会自动搜索并下载应用镜像(image)。镜像不仅包含应用本身,还包含应用运行所需要的环境、配置、系统函数库。docker会在运行镜像时创建一个隔离环境,称为容器(container)。
镜像仓库:存储和管理镜像的平台,docker官方维护了一个公共仓库:docker Hub。
访问地址:hub.docker.com
镜像仓库已经下载好的安装包,需要敲一个命令,由docker server来运行,客户端输入命令之后,docker的守护进程会进行监听,运行的那个就去镜像仓库进行查找,然后再拉取到本地,运行docker时会自动创建一个隔离环境,叫容器,一次拉去镜像可以多次使用,可以同时部署多个,互不影响
5. *docker命令*
docker最常见的命令就是操作镜像、容器的命令,详见官方文档: https://docs.docker.com/
5.1 *docker常见的命令*
命令 | 说明 |
---|---|
dockers pull | 拉取镜像 |
docker push | 推送镜像到dockerRegistry |
docker images | 查看本地镜像 |
docker rmi | 删除本地镜像 |
docker run | 创建并运行容器(不能重复创建) |
docker stop | 停止指定容器 |
docker start | 启动指定容器 |
docker restart | 重新启动指定容器 |
docker rm | 删除指定容器 |
docker rm -f $(docker ps -aq) | 强制删除正在运行的所有容器 |
docker ps | 查看容器 |
docker logs | 查看容器运行日志 |
docker logs -f --tail 100 容器id | 查看容器运行最后的100条日志 |
docker exec | 进入容器 |
docker save | 保存镜像到本地压缩文件 |
docker load | 加载本地压缩文件到镜像 |
docker inspect | 查看容器详细信息 |
docker search | 查找镜像 |
docker status 容器id | 查看容器的状态(cpu、内存、网络I/o) |
下图来表示这些命令的关系:
5.2 *案例演示相关命令*
5.2.1 *拉取镜像*
如何拉取一个镜像,以nginx为例
查看dockerHub,拉取Nginx镜像,创建并运行Nginx容器,docker pull nginx
查看本地镜像是否拉取成功,命令docker images
5.2.2 *保存镜像*
如何将这个镜像保存为一个tar包,docker save -o nginx.tar mynginx:v1.0
5.2.3 *加载镜像*
如何加载一个镜像:docker load -i nginx.tar
5.2.4 *运行容器*
运行nginx容器,docker run -d --name nginx -p 80:80 nginx
5.2.5 *停止容器*
停止nginx容器,docker stop nginx
5.2.6 *查看容器*
查看所有的容器(包括停止的容器)
docker ps -a
5.2.7 *启动容器*
启动nginx: docker start nginx
5.2.8 *查看容器日志*
查看日志: docker logs -f --tail 100 nginx
5.2.9 *进入容器内部*
进入容器的内部:docker exec -it nginx bash
退出并进入mysql容器内部,docker exec -it mysql bash
5.2.10 *docker 命名别名*
docker命令别名:找到~/.bashrc文件
vim ~/.bashrc
让配置生效:source ~/.bashrc
查看容器id、镜像名称、端口号、状态、镜像名称
5.2.11 *删除镜像*
删除镜像:
docker rmi nginx:latest
6. *数据卷*
容器是隔离环境,容器内程序的文件、配置、运行时产生的容器都在容器内部,我们要读写容器内的文件非常不方便。以下是一个利用Nginx容器部署静态资源的案例。
需求:创建Nginx容器,修改nginx容器内的html目录下的index.html文件,查看变化,将静态资源部署到nginx的html目录。
在此地址下找到nginx的静态资源目录https://hub.docker.com/
使用命令:docker exec -it nginx bash进入到nginx的容器内部,进入到容器内部目录/usr/share/nginx/html/,修改index.html文件
显然vi命令无法进入index.html文件内部进行修改,因此,容器提供程序的运行环境,但是程序运行产生的数据、程序运行依赖的配置都应该与容器解耦,
此时就需要通过另一种方式来进行修改。
6.1 *什么是数据卷*
数据卷(volume)是一个虚拟目录,是容器内目录与宿主机目录之间映射的桥梁。
以修改nginx中的html和conf的配置为例,首先需要使用docker来创建html和conf两个数据卷,两个数据卷的真实目录就在我们所使用的宿主机上,数据卷与宿主机的目录进行一一对应,让容器内的目录与数据卷进行挂载,产生关联,通过数据卷可以使容器内的目录和宿主机的目录进行双向邦定。
6.2 *数据卷的相关命令*
命令 | 说明 |
---|---|
docker volume create | 创建数据卷 |
docker volume ls | 查看所有数据卷 |
docker volume rm | 删除指定数据卷 |
docker volume inspect | 查看某个数据卷的详情 |
docker volume prune | 清除数据卷 |
6.3 *如何创建和使用数据卷*
1、在执行docker run命令时,使用 -v 数据卷:容器内目录 可以完成数据卷挂载。
2、当创建容器时,如果挂载了数据卷且数据卷不存在,会自动创建数据卷。
docker run -d --name nginx -p 80:80 -v html:/usr/share/nginx/html nginx
使用docker volume ls 查看数据卷
使用docker volume inspect html 查看数据卷挂载在宿主机的那个目录下
进入宿主机/var/lib/docker/volumes/html/_data目录下,修改index.html并在此目录下添加一张图片
再次进入nginx容器内部,docker exec -it nginx bash,进入到ngnix的 /usr/share/nginx/html/目录下,该目录下的文件和宿主机的目录下文件一一对应。
结论:只要宿主机下的数据卷进行修改后,对应的容器内部文件也会一一对应被修改。
7. *DockerCompose*
在部署一个简单的项目,其中包含的容器也很少,手动安装逐一安装部署还不是很麻烦,例如我们的图平台有大量的基础组件以及各种微服务组件,在没有自动安装部署的脚本下,手动一一安装部署,显得非常的麻烦。而Docker Compose就可以帮助我们实现多个相互关联的Docker容器的快速部署。它允许用户通过一个单独的 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器。
7.1 *安装 docker compose*
curl -L https://github.com/docker/compose/releases/download/v2.24.6/
docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
7.2 *基本语法*
docker-compose.yml文件的基本语法可以参考官方文档。
https://docs.docker.com/reference/compose-file/legacy-versions/
docker-compose文件中可以定义多个相互关联的应用容器,每一个应用容器被称为一个服务(service)。由于service就是在定义某个应用的运行时参数,因此与docker run参数非常相似。
举例来说,用docker run部署MySQL的命令如下:
docker run -d
--name mysql
-p 3306:3306
-e TZ=Asia/Shanghai
-e MYSQL_ROOT_PASSWORD=123
-v ./mysql/data:/var/lib/mysql
-v ./mysql/conf:/etc/mysql/conf.d
-v ./mysql/init:/docker-entrypoint-initdb.d
--network blogo
mysql
如果用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"
networks:
- new-net
networks:
new-net:
name: blogo
对比如下:
docker run 参数 | docker compose 指令 | 说明 |
---|---|---|
--name | container_name | 容器名称 |
-p | ports | 端口映射 |
-e | environment | 环境变量 |
-v | volumes | 数据卷配置 |
--network | networks | 网络 |
7.3 *基础命令*
常见命令详见官方文档:https://docs.docker.com/reference/
基本语法命令:docker-compose [OPTIONS] [COMMAND] -d
其中,OPTIONS和COMMAND都是可选参数,-d 参数是后台启动,比较常见的有:
类型 | 参数或指令 | 说明 |
---|---|---|
Options | -f | 指定compose文件的路径和名称 |
-p | 指定project名称。project就是当前compose文件中设置的多个service的集合,是逻辑概念 | |
Commands | up | 创建并启动所有service容器 |
down | 停止并移除所有容器、网络 | |
ps | 列出所有启动的容器 | |
logs | 查看指定容器的日志 | |
stop | 停止容器 | |
start | 启动容器 | |
restart | 重启容器 | |
top | 查看运行的进程 | |
exec | 在指定的运行中容器中执行命令 |
7.4 *docker compose 安装mysql*
version: '3.8'
services:
mysql:
container_name: mysql
image: mysql:latest
ports:
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=123
volumes:
- mysql-data:/var/lib/mysql
restart: always
volumes:
mysql-data:
上线命令:docker-compose -f compose.yaml up -d
下线命令:docker-compose -f compose.yaml down
标签:实战,容器,compose,入门,nginx,mysql,镜像,docker,Docker From: https://www.cnblogs.com/ccl971123/p/18546187