Docker快速入门到项目实战部署

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

posted @   追こするれい的人  阅读(207)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示