安装
基础的 Linux 环境,可以参考之前的《wsl2下安装ArchLinux系统并进行常用配置》,https://blog.chunxiao.site/posts/wsl2-arch/
安装docker
sudo pacman -S docker
如果安装我上面文章提到的方式安装的 ArchLinux 的话,应该没有任何报错,直接安装即可,不过有可能遇到一些 kerying
等相关的报错,可以详细再去看一下上面文章中关于系统初始化那部分:
开启docker服务
# 启动服务 这一步我电脑上卡了好久 - 可以耐心等待几分钟
sudo systemctl start docker
# 配置开机启动
sudo systemctl enable docker
# 检查启动状态
sudo systemctl status docker
安装docker compose
直接命令安装即可
sudo pacman -S docker-compose
下面介绍常见用法
常见用法
我们先来安装一个可视化的服务,正好作为我们的第一个服务。
portainer:https://hub.docker.com/r/portainer/portainer-ce
拉取镜像
sudo docker pull portainer/portainer-ce
相信大家跟我一样,报错了~
所以我们现在还要来解一个现实中的实际问题,怎么走代理拉取镜像。
代理配置
之前的时候,有许多国内的镜像地址,这样的话直接配置源就行了,但不知道什么原因,现在都不行了(不稳定),那其实我们用起来就很困难。
可以去看下官方文档关于代理的介绍:https://docs.docker.com/engine/cli/proxy/
简单来说的话,分为两大部分
- Docker CLI 或 Docker Engine 本身的代理设置,这个就是我们常用的比如 pull 时候需要的代理
- 配置容器的代理环境变量,也就是容器内访问的时候使用的代理
针对两种情况,配置的方式也不一样,大多数情况下我们只需要配置第一种情况即可,比如我们能正常 pull 下来即可,
Docker 本身代理配置
官方文档参考:https://docs.docker.com/engine/daemon/proxy/
我们上面安装的时候其实已经让守护进行作为了systemd
服务来运行的,因此直接参考官方配置方式
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo vim /etc/systemd/system/docker.service.d/http-proxy.conf
配置文件参考:
这里不能使用变量,systemd是静态配置,无法使用环境变量,因此只能写死。
这里的 ip
还是跟之前文章介绍的那样,在宿主机找到 wsl 对应的网卡ip,还好是这个 ip 基本不会变,我们也不用经常变更文件
tips:重要啊,中间的那个https的,自己的代理一定也要用 http 的方式啊,因为这个排查了好久,最后才意识到是这个问题。
[Service]
Environment="HTTP_PROXY=http://172.18.16.1:7890"
Environment="HTTPS_PROXY=http://172.18.16.1:7890"
Environment="NO_PROXY=localhost,127.0.0.1"
刷新更改并重新启动 Docker
sudo systemctl daemon-reload
sudo systemctl restart docker
验证配置是否已加载并与您所做的更改相匹配
sudo systemctl show --property=Environment docker
容器内部的代理
我们启动docker时候都是用的 sudo docker
命令,因此这个配置文件需要在 root 目录下:/root/.docker/config.json
sudo vim /root/.docker/config.json
配置如下:
{
"proxies": {
"default": {
"httpProxy": "http://172.18.16.1:7890",
"httpsProxy": "https://172.18.16.1:7890",
"noProxy": "localhost,127.0.0.1"
}
}
}
好, 我配置上之后,我们再继续上面的 portainer 的拉取。
第一个docker服务-可视化
我们继续执行上面的拉取操作:
sudo docker pull portainer/portainer-ce
查看本地镜像
sudo docker images
运行
sudo docker run -d -p 9000:9000 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer-ce:latest
命令解释如下:
-d:在后台运行容器。
-p 9000:9000:将容器的9000端口映射到主机的9000端口。
--name portainer:为容器指定一个名字,方便以后管理。
--restart=always:设置容器总是自动重启。
-v /var/run/docker.sock:/var/run/docker.sock:将主机的Docker守护进程Unix套接字文件映射到容器中,这样Portainer-CE才能管理主机上的Docker容器。
查看运行中的容器
sudo docker ps
查看容器日志:后面的是通过ps 查到的CONTAINER ID
sudo docker logs -f ea3de31ff2a5
服务已经启动了,我们可以去看看,因为配置的是把容器内的 9000 端口映射到主机的 9000 端口,因此我们直接在本地访问:
http://127.0.0.1:9000 即可
这样就说明我们的服务启动并且运行正常了。
停止服务
sudo docker stop ea3de31ff2a5
这个可视化的服务挺好的啊,建议大家可以都部署上,里面具体怎么使用自己研究哈。
启动时候的常用参数
- -p 端口映射,也就是把容器内的指定端口映射到主机的对应端口,左边是主机端口,右边是容器内端口,比如 -p 80:8080,就代表将容器内的8080映射到主机的80端口
- -v 目录/文件映射(简单理解),同样左边是主机目录,右边是容器目录,一般用作持久化数据使用,比如容器内产生的数据,如果没有映射到主机上,再次启动可能就全部丢失了。
其他的可以参考网上资料,或者如果大家有需要的话,我抽空整理一个docker 命令查询大全,方便大家参考查询。上面这两个是几乎每个都少不了的,都支持多个,比如映射多个端口,多个目录。
docker compose
上面已经介绍了 docker 的基础用法了,为什么还要再说一下 docker compose 呢,就我个人而言啊,我感觉自己记不住上面的一大串命令:
sudo docker run -d -p 9000:9000 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer-ce:latest
并且这个还比较简单,只是一个端口一个文件,有的服务需要配置非常多的端口以及非常多的目录映射,再记录这个命令就很费劲了,于是就可以用这个,docker compose 可以认为就是对 docker 进行的服务编排。在我看来,我比较喜欢用这个代替直接使用 docker 的原因,有两点:
- 如上所述,不需要记录大量的启动命令,一次配置,文件保存,每次启动只需要一个命令即可:
sudo docker compose up -d
,关闭:sudo docker compose down
- 需要一次启动多个服务,并且服务之间有相互依赖,docker compose的配置文件中,是支持部署多个服务的,并且支持多个服务之间配置依赖,根据依赖顺序启动多个服务。
简单使用
怎么使用呐,找一个自己喜欢的目录(大家可以参考我的使用方式,专门建一个个人配置相关的github私有项目,里面通过多个不同目录,定义不同的 docker 服务),这样数据也不会丢失。
比如根目录如下:/home/chunxiao.li/dockers/portainer
创建docker-compose.yaml
文件,如下:
services:
portainerce:
image: portainer/portainer-ce:latest
container_name: portainerce
restart: unless-stopped
volumes:
- /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./portainer-data:/data
ports:
- 9000:9000
随后在与该文件的同级目录,直接运行命令:
sudo docker compose up -d
即可启动,启动后 docker 会按照配置文件以此拉取镜像,配置,启动服务。
默认会找当前目录下的 docker-compose.yaml
文件,因此不想记住更多复杂的启动命令的话,针对不同的docker服务分目录存储,每次启动只用进入到不同的目录,执行相同的命令即可。
关闭服务:
sudo docker compose down
简单对配置文件进行介绍
docker compose 配置文件有非常多的参数,我这里不再一个一个对着看,可以参考官方wiki:https://docs.docker.com/reference/compose-file/
这里针对上面的进行一个简单介绍:
services:
portainerce: // 代表定义了一个服务叫做 portainerce
image: portainer/portainer-ce:latest // 代表这个服务使用镜像: portainer/portainer-ce:latest
container_name: portainerce // 这里定义了这个容器的名名字
restart: unless-stopped // 这里指的是这个容器除非手动停止,否则就会一直重启(比如宿主机重启了,服务意外终止了等等)
volumes: // 这个节点下面配置的就是目录的映射
- /etc/localtime:/etc/localtime:ro // 代表把宿主机下的/etc/localtime映射到容器的这个目录,后面的:ro代表只读模式,也就是容器中只能只读
- /var/run/docker.sock:/var/run/docker.sock:ro // 同上,这两个都属于该服务需要用到的文件
- ./portainer-data:/data // 这个就是把容器中的 /data 目录数据映射到主机的 ./portainer-data目录,以实现持久化(说明这个容器在构建的时候把数据都存在了 /data 下)
ports: // 这个节点下面配置的就是要映射的端口
- 9000:9000 // 这个指的就是把容器内的9000(右边)映射到主机的9000(左边),说明这个容器构建的时候把运行端口设置的是9000
后续
其实周末在家是打算出一期 饥荒服务器后台管理部署
的教程,但是发现必须要先有对 docker 的日常使用环境,因此这期先介绍这个。
下期就拿着 dst-admin 的 docker compose
配置来介绍使用方式。