所用系统为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