安装

基础的 Linux 环境,可以参考之前的《wsl2下安装ArchLinux系统并进行常用配置》,https://blog.chunxiao.site/posts/wsl2-arch/

安装docker

sudo pacman -S docker

如果安装我上面文章提到的方式安装的 ArchLinux 的话,应该没有任何报错,直接安装即可,不过有可能遇到一些 kerying 等相关的报错,可以详细再去看一下上面文章中关于系统初始化那部分:

image-20250322150136825

开启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

image-20250322160514741

相信大家跟我一样,报错了~

所以我们现在还要来解一个现实中的实际问题,怎么走代理拉取镜像。

代理配置

之前的时候,有许多国内的镜像地址,这样的话直接配置源就行了,但不知道什么原因,现在都不行了(不稳定),那其实我们用起来就很困难。

可以去看下官方文档关于代理的介绍:https://docs.docker.com/engine/cli/proxy/

简单来说的话,分为两大部分

  1. Docker CLI 或 Docker Engine 本身的代理设置,这个就是我们常用的比如 pull 时候需要的代理
  2. 配置容器的代理环境变量,也就是容器内访问的时候使用的代理

针对两种情况,配置的方式也不一样,大多数情况下我们只需要配置第一种情况即可,比如我们能正常 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

image-20250322173717284

容器内部的代理

我们启动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

image-20250322180639346

查看本地镜像

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 即可

image-20250322181817310

这样就说明我们的服务启动并且运行正常了。

停止服务

sudo docker stop ea3de31ff2a5

这个可视化的服务挺好的啊,建议大家可以都部署上,里面具体怎么使用自己研究哈。

启动时候的常用参数

  1. -p 端口映射,也就是把容器内的指定端口映射到主机的对应端口,左边是主机端口,右边是容器内端口,比如 -p 80:8080,就代表将容器内的8080映射到主机的80端口
  2. -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 的原因,有两点:

  1. 如上所述,不需要记录大量的启动命令,一次配置,文件保存,每次启动只需要一个命令即可:sudo docker compose up -d,关闭:sudo docker compose down
  2. 需要一次启动多个服务,并且服务之间有相互依赖,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 配置来介绍使用方式。