Docker折腾笔记

所用系统为ubuntu 20.04 64位和ubuntu22.04 64位

Docker安装

Docker程序安装

Docker安装共有两种途径,一种是使用官方脚本直接安装,另一种是按照官方教程使用apt安装
两种方法我都测试了一下,脚本安装十分方便,手动安装看起来麻烦,但实际操作上也并不繁琐
按官方说法,需要定制化建议选择手动安装,但在我个人尝试下,按照官方教程手动安装与直接脚本安装基本没有区别,建议大家直接使用脚本安装

脚本安装

在测试或开发环境中 Docker 官方为了简化安装流程,提供了一套便捷的安装脚本,Ubuntu 系统上可以使用这套脚本安装,另外可以通过 --mirror 选项使用国内源进行安装:
若你想安装测试版的 Docker, 请从 test.docker.com 获取脚本

# $ curl -fsSL test.docker.com -o get-docker.sh
$ curl -fsSL get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh --mirror Aliyun
# $ sudo sh get-docker.sh --mirror AzureChinaCloud

执行这个命令后,脚本就会自动的将一切准备工作做好,并且把 Docker 的稳定(stable)版本安装在系统中。

手动安装

由于 apt 源使用 HTTPS 以确保软件下载过程中不被篡改。因此,我们首先需要添加使用 HTTPS 传输的软件包以及 CA 证书。

sudo apt-get update

sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

为了确认所下载软件包的合法性,需要添加软件源的 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

然后,我们需要向 sources.list 中添加 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

更新 apt 软件包缓存,并安装 docker-ce

sudo apt-get update

sudo apt-get install docker-ce docker-ce-cli containerd.io # 亲测后两者已经包含在了第一个里

docker compose安装

安装docker的compose指令,在此之后就可以通过docker compose xxx执行compose指令了(脚本安装也会自动安装docker compose指令)

sudo apt-get install docker-compose-plugin

Docker启动

sudo systemctl enable docker
sudo systemctl start docker

建立docker用户组

sudo groupadd docker # 建立docker用户组
sudo usermod -aG docker $USER # 将当前用户加入docker组

推出终端后重新登录

测试 Docker 是否安装正确

docker run --rm hello-world

不报错即安装成功

Docker加速

Docker设置加速镜像源

sudo nano /etc/docker/daemon.json
# daemon.json
{
  "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn/"]
}
# 文件结束

systemctl restart docker

docker pull代理

在执行docker pull时,是由守护进程dockerd来执行.因此,代理需要配在dockerd的环境中,这个环境,则是受systemd所管控,因此实际是systemd的配置

即export的http_proxy同样无效

sudo mkdir -p /etc/systemd/system/docker.service.d
sudo nano /etc/systemd/system/docker.service.d/proxy.conf
# 输入内容
[Service]
Environment="HTTP_PROXY=http://ip:port/"
Environment="HTTPS_PROXY=http://ip:port/"
Environment="NO_PROXY=localhost,127.0.0.1,.example.com"
# 保存后重新加载systemd
sudo systemctl daemon-reload
sudo systemctl restart docker

Docker Compose

docker-compose安装

新版Docker已经自带了compose,在命令行输入

docker compose version
> Docker Compose version v2.6.0

即代表系统中已经有了docker compose
但需要注意的是默认自带的compose是docker的一个命令,因此两者之间是空格连接

如果没有找到docker compose,则需要自行下载

前往https://github.com/docker/compose/releases
找到最新版本后点进去,选择与自己系统相对应的版本,复制链接

系统版本可通过uname -a查看

# 使用wget下载,curl不知道为啥可能会下载不完整
# 我的系统是linux的aarch64
wget https://github.com/docker/compose/releases/download/v2.10.0/docker-compose-linux-aarch64
# 下载完成后将文件转移至/usr/local/bin中
sudo mv docker-compose-linux-aarch64 /usr/local/bin/docker-compose
# 添加可执行权限
sudo chmod +x /usr/local/bin/docker-compose
# 建立/usr/bin的软链接
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
# 检查安装是否成功
docker-compose --version
> Docker Compose version v2.10.0

Docker Compose 使用

首先,关于为什么所有的docker compose配置文件都命名为docker-compose.yml
因为docker compose在执行时,会绑定当前目录.因此不用目录的docker-compose.yml互不冲突
因此比较建议的docker项目目录结构是

- Dockers
- - homeassistant(单个容器构成的应用)
- - - docker-compose.yml
- - - homeassistant
- - - - (homeassistant容器的config目录映射)
- - - - configuration.yaml
- - - - custom_components
- - - - ...

- - yunzai-bot(两个容器构成的应用)
- - - docker-compose.yml
- - - yunzai
- - - - (yunzai容器的目录映射)
- - - - config
- - - - data
- - - - plugins
- - - - ...
- - - redis
- - - - (redis容器的目录映射)
- - - - ...

镜像

Portainer

Docker的webUI界面,很推荐

docker pull portainer/portainer

docker run -d \
  --name portainer \
  -v ./portainer:/data \
  -v /var/run/docker.sock:/var/run/docker.sock:ro \
  -v /etc/localtime:/etc/localtime:ro \
  -p 9000:9000 \
  --restart=always \
  portainer/portainer

# docker compose启动
# docker-compose.yml
version: '3.7'
services:
  portainer:
    container_name: portainer
    image: "portainer/portainer"
    volumes:
      - ./docker:/data
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "9000:9000"
    restart: always
# 文件结束
docker compose up -d

HomeAssistant

智能家居系统

# 快速通过但版本很低
docker pull docker.mirrors.ustc.edu.cn/homeassistant/home-assistant
# 慢速各种失败,但亲测可以采用ustc的镜像源加速
docker pull ghcr.io/home-assistant/home-assistant:stable

# 直接启动
docker run -d \
  --name homeassistant \
  --privileged \
  --restart=unless-stopped \
  -e TZ=Asia/Shanghai \
  -v ./homeassistant:/config \
  --network=host \
  ghcr.io/home-assistant/home-assistant:stable

# docker compose启动
# docker-compose.yml
version: '3.7'
services:
  homeassistant:
    container_name: homeassistant
    image: "ghcr.io/home-assistant/home-assistant"
    volumes:
      - ./homeassistant:/config
      - /etc/localtime:/etc/localtime:ro
    restart: unless-stopped
    privileged: true
    network_mode: host
    environment:
      - TZ=Asia/Shanghai
# 文件结束
docker compose up -d

相关文章

学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习...
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面...
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生...
Can’t connect to local MySQL server through socket \'/v...
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 ...
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服...