1.docker+docker compose
1.1 概念
明确几个概念,希望大家对 docker / docker compose / k8s / .. 有个清晰认知: 1. docker 面向服务交付,解决了服务打包的问题,在容器化流行之前, 研发交付的是代码(动态语言,比如PHP)或者build后生成的文件(Java),针对运行环境的管理多交给运维;容器化之后,研发交付的是镜像,基本来说就是可以在绝大部分环境直接运行的一个产物,镜像中除了打包了程序,还打包了程序运行的所有依赖,包括系统需要安装什么包,这样就极大减轻了运行环境变化引入的各类奇葩问题。镜像类似一个程序的压缩包,而容器是镜像启动以后的名称,以进程形态存在于运行环境中。 2. 最简单启动容器的方式是 docker run ... ,但 docker run 在部署的时候有一些不足,比如配置项多了看着比较乱,也不方便滚动更新。如果一个服务需要依赖多个容器,docker run 就得执行好几遍。所以生产环境中,多是采用 docker compose 进行服务容器部署,它解决了单机多容器编排的问题,白话就是在一个机器上一次性起很多个容器 3. 如果单机无法承载怎么办,这就引出了多机多容器编排的问题,现在最主流的方案是 K8S,这个暂时不对你们做要求。但如果谁感兴趣,可以再问我。
1.2 docker 下载安装
-
再推荐一款 https://github.com/ossc-db/pg_bulkload,不过这个需要编译安装,你们后期在学习 Docker 镜像构建的时候可以学习一下
1.1.1 下载安装
-
卸载旧版本
$ sudo apt-get remove docker \ docker-engine \ docker.io \ containerd \ runc sudo apt-get purge docker-ce docker-ce-cli containerd.io sudo apt-get autoremove -y --purge docker-ce docker-ce-cli containerd.io sudo rm -rf /var/lib/docker /etc/docker sudo rm /etc/apparmor.d/docker sudo groupdel docker sudo rm -rf /var/run/docker.sock
-
使用APT开始安装
$ sudo apt-get update $ sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg \ lsb-release
-
添加源APT GPG秘钥
$ curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg # 官方源 # $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
-
添加docker源
$ echo \ "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # 官方源 # $ echo \ # "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ # $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
-
开始安装Docker
-
查看可用版本
$ sudo apt-get update $ apt-cache madison docker-ce $ apt-cache madison docker-ce-cli
-
安装指定版本
$ sudo apt-get install docker-ce=5:27.0.3-1~ubuntu.20.04~focal docker-ce-cli=5:27.0.3-1~ubuntu.20.04~focal containerd.io
-
直接安装最新版本
sudo apt-get install docker-ce docker-ce-cli containerd.io
-
-
查看安装情况
sudo docker -v docker info
1.1.2 镜像拉取
::怎么解决镜像拉取问题? https://blog.youkuaiyun.com/zsljfok/article/details/131164336 ::镜像拉取 https://docker.awsl9527.cn https://dockerhub.icu/ ::镜像加速器 推荐阅读一下 https://gist.github.com/y0ngb1n/7e8f16af3242c7815e7ca2f0833d3ea6,这算是全网写的比较全面的一份文档,讲镜像加速器的。 拉取镜像可以走两条路,一条是通过 Mirror,一条是通过代理。你可以在昨天那张科学上网图的基础上把通过代理拉取镜像的网络请求流程图画清楚。 因为结合了代理所以网络链路会更复杂一点,但是有助于你了解完整的请求链路
从Docker拉取镜像一直失败超时?这些解决方案帮你解决烦恼 https://blog.youkuaiyun.com/weixin_50160384/article/details/139861337?spm=1001.2014.3001.5506
-
步骤
-
查看镜像源(手动创建)
cat /etc/docker/daemon.json
-
修改镜像源
sudo vi /etc/docker/daemon.json { "registry-mirrors": ["https://docker.awsl9527.cn","https://dockerhub.icu"], "default-address-pools": [ {"base":"10.10.0.0/16","size":24} ], "insecure-registries": ["registry.inventec"] }
-
修改完镜像源需要重启docker
sudo systemctl daemon-reload sudo systemctl restart docker
1.1.3 下载安装docker compose
1.方法
-
GitHub 官方下载安装(推荐,速度慢但不会出错)
wget https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-linux-x86_64
-
移动下载软件到/usr/local/bin/docker-compose覆盖旧版本:
mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose
-
赋予执行权限
chmod +x /usr/local/bin/docker-compose
-
测试安装是否成功
docker-compose --version
2.案例
案例要求:同时部署mysql、redis、nginx、nacos等组件容器。 1.创建文件夹:mkdir -p /usr/local/mycompose 2.进入文件夹:cd /usr/local/mycompose 3.创建 docker-compose.yml文件:vi docker-compose.yml
version: '3' services: redis1: image: redis ports: - "6379:6379" container_name: "redis1" networks: - dev mysql1: image: mysql environment: MYSQL_ROOT_PASSWORD: "ut.123456" ports: - "3306:3306" container_name: "mysql1" networks: - dev nginx1: image: nginx ports: - "8080:80" container_name: "nginx1" networks: - dev nacos1: image: nacos/nacos-server ports: - "8848:8848" container_name: "nacos1" networks: - dev networks: dev: driver: bridge pro: driver: bridge
.后台启动配置中创建的容器:docker-compose up -d
1.3 docker命令
启动 systemctl start docker 守护进程重启 sudo systemctl daemon-reload 重启docker服务 systemctl restart docker 重启docker服务 sudo service docker restart 关闭docker service docker stop 关闭docker systemctl stop docker 1
1.4 每配置项
-
另外 /etc/docker/daemon.json 里面配置的 default-address-pools 你也研究一下这个啥作用,这个其实很关键。