Docker管理软件非常方便,而且还有很好的隔离性。例如安装mysql、redis、mosquitto、kafuka、superset、nginx、jenkins等。
环境准备
安装Docker
# 1. 卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc
sudo apt purge docker-ce docker-ce-cli containerd.io
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
# 2. 安装依赖
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg lsb-release
# 3. 添加 Docker 官方 GPG 密钥
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# 4. 设置仓库
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 5. 安装 Docker 引擎
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 6. 验证安装 : 这里可能会失败,因为docker的镜像站在国内访问连同性不好
sudo docker run hello-world设置镜像源站
编辑文件daemon.json如下内容与路径。
$ cat /etc/docker/daemon.json
{
"registry-mirrors": [
"https://ccr.ccs.tencentyun.com",
],
"bip":"192.168.2.1/24"
}
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
然后拉一个nginx看看
$ sudo docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
c353fd29d8c5: Pull complete
98b095d7d2b4: Pull complete
af5f0e3644c1: Pull complete
Digest: sha256:fad8e1cd52e24bce7b72cd7cb674a2efad671647b917055f5bd8a1f7ac9b1af8
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
授权
避免每次都要sudo,可以授权当前用户具有docker的操作权限
# 将当前用户加入 docker 组
sudo usermod -aG docker $USER
# 退出当前会话重新登录(或重启)
newgrp docker # 立即生效(或直接重启终端)网络
# 创建两个容器,默认会自动连接到 bridge 网络
docker run -d --name container1 nginx
docker run -d --name container2 nginx
# 进入container1
docker exec -it container1 bash
# 在container1中ping container2
ping container2
# 创建自定义网络
docker network create my-network限定网络资源
# 创建自定义网络并限制带宽
docker network create --driver bridge \
--opt com.docker.network.driver.mtu=1500 \
my-network
# 使用tc在容器内限制 (需要特权模式)
docker run -it --cap-add=NET_ADMIN ubuntu:latest
# 或者在宿主机上对容器网络接口使用tc磁盘
限定磁盘资源
# 磁盘读写限制
docker run -it \
--device-read-bps /dev/sda:1mb \
--device-write-bps /dev/sda:1mb \
--device-read-iops /dev/sda:100 \
--device-write-iops /dev/sda:100 \
ubuntu:latestCPU
限定CPU资源
# 限制CPU使用
docker run -it --cpus="1.5" ubuntu:latest # 使用1.5个CPU核心
docker run -it --cpuset-cpus="0-3" ubuntu:latest # 绑定到特定CPU
# CPU份额限制 (相对权重)
docker run -it --cpu-shares=512 ubuntu:latest内存
限定内存资源
# 内存限制
docker run -it -m 512m ubuntu:latest # 512MB内存
docker run -it -m 1g --memory-swap 2g ubuntu:latest # 1GB内存,2GB交换空间运行软件
用docker compose限定资源
version: '3.8'
services:
app:
image: my-app:latest
deploy:
resources:
limits:
cpus: '1.0'
memory: 512M
reservations:
cpus: '0.5'
memory: 256M
blkio_config:
device_read_bps:
- path: /dev/sda
rate: '1mb'
device_write_bps:
- path: /dev/sda
rate: '1mb'