Skip to content

Docker

如无例外 以下均在 ubuntu 系统上操作

docker 官网:https://www.docker.com/

1. 安装

1.1 更简单的安装方法

使用docker 官方提供的安装脚本,来自Docker 官方GitHub仓库

并使用阿里云的镜像

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

Tips

如果希望安装特定版本,可以使用-v 参数,下文的portainer 和docker 存在一些版本兼容问题 如:

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun -v 25.0.5

设置docker 开机自启动

sudo systemctl enable docker && sudo systemctl enable docker

1.2 官网文档安装方法

文档:https://docs.docker.com/engine/

需要注意的是,要安装的是 Docker Enfine,而不是Docker Desktop

ubuntu 安装文档 https://docs.docker.com/engine/install/ubuntu/

按照官方文档安装即可,因为涉及到国内网络对docker 官方软件源访问受限的问题,上面阿里云的官方安装脚本是比较好的选择

2. Docker-Compose

非必要

Docker Compose 是 Docker 的一个工具,用于定义和运行多个容器的应用程序。它允许你通过一个 YAML 文件来配置多个容器,定义它们之间的关系和依赖,并且可以一键启动、停止和管理这些容器。

安装 docker-compose

sudo apt  install docker-compose

外部网络+静态IP

最近在尝试搭建一个 chat gpt 聊天相关的项目,但是逆向程序还有UI界面在不同的项目,我希望UI直接访问我的逆向项目接口,每一个项目分配一个固定ip

最开始先创建这样一个网络,要求必须 指定 --subnet创建的网络才能指定静态IP

docker network create chat-net-et0 --subnet=172.19.0.0/16

然后一个 docker compose 例子如下:

version: '3'

# 声明外部网络
networks:
  chat-net-et0:
    external: true
    
services:
  lobe-chat:
    image: lobehub/lobe-chat # 这是一个ChatGPT相关的UI界面项目,比较美观
    container_name: lobe-chat
    ports:
      - "3210:3210"
    environment:
      - OPENAI_API_KEY=xxx
      - OPENAI_PROXY_URL=http://172.19.0.6:8888/v1 #另一个容器 被分配 172.19.0.6,我这里直接使用另一个容器的固定ip 访问它
      - ACCESS_CODE=xxxx
    networks:
      chat-net-et0: # 指定网络和ip
        ipv4_address: 172.19.0.3

3. Portainer

Tips

官方文档(安装更新):https://docs.portainer.io/start/upgrade/docker

Portainer 是一个开源的 Docker 容器管理工具,https://docs.portainer.io/user/home

docker pull portainer/portainer-ce:latest #ce 是社区版,详情查看官方文档

docker run -d \
-p 8000:8000 \
-p 9000:9000 \
-p 9443:9443 \
--name=portainer \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data portainer/portainer-ce:latest

Unable to retrieve image details or access container console after update of Docker to v26

不能打开命令行

docker image rm portainer/portainer-ce:latest
docker pull portainer/portainer-ce:2.20.3
docker image tag portainer/portainer-ce:2.20.3 portainer/portainer-ce:latest

其他

使用代理拉取镜像

设置透明代理方式

sudo ip route del default && sudo ip route add default via 192.168.0.10 dev enp2s0
# 其中 192.168.0.10 为网关地址 eth0 为网卡地址

推荐使用透明代理方式,而非手动配置代理

手动配置代理

docker 配置拉取镜像时候的代理

sudo mkdir -p /etc/systemd/system/docker.service.d
sudo touch /etc/systemd/system/docker.service.d/http-proxy.conf

/etc/systemd/system/docker.service.d/proxy.conf 写入代理信息

[Service]
Environment="http_proxy=http://127.0.0.1:7899/"
Environment="https_proxy=http://127.0.0.1:7899/"
Environment="no_proxy=localhost,127.0.0.0/8,docker-registry.somecorporation.com"

重启服务

sudo systemctl daemon-reload
#sudo systemctl show --property Environment docker # 检查配置
sudo systemctl restart docker