Docker实战

发布于:2025-05-27 ⋅ 阅读:(19) ⋅ 点赞:(0)

一、Docker架构

https://docs.docker.com/get-started/docker-overview/#docker-architecture
在这里插入图片描述

二、Docker安装

1.官方方式

https://docs.docker.com/engine/install/ubuntu/

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

systemctl start docker
systemctl enable docker

2.aliyun方式

https://help.aliyun.com/zh/ecs/use-cases/install-and-use-docker#59d024a3e32um

2.1 debian

#更新包管理工具
sudo apt-get update
#添加Docker软件包源
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
sudo curl -fsSL http://mirrors.cloud.aliyuncs.com/docker-ce/linux/debian/gpg | sudo apt-key add -
sudo add-apt-repository -y "deb [arch=$(dpkg --print-architecture)] http://mirrors.cloud.aliyuncs.com/docker-ce/linux/debian $(lsb_release -cs) stable"
#安装Docker社区版本,容器运行时containerd.io,以及Docker构建和Compose插件
sudo apt-get -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
#启动Docker
sudo systemctl start docker
#设置Docker守护进程在系统启动时自动启动
sudo systemctl enable docker

2.2 ubuntu

#更新包管理工具
sudo apt-get update
#添加Docker软件包源
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
sudo curl -fsSL http://mirrors.cloud.aliyuncs.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository -y "deb [arch=$(dpkg --print-architecture)] http://mirrors.cloud.aliyuncs.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
#安装Docker社区版本,容器运行时containerd.io,以及Docker构建和Compose插件
sudo apt-get -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
#启动Docker
sudo systemctl start docker
#设置Docker守护进程在系统启动时自动启动
sudo systemctl enable docker

3.linuxmirrors方式(推荐)

https://linuxmirrors.cn/#docker

bash <(curl -sSL https://linuxmirrors.cn/docker.sh)

4.1panel方式(强烈推荐)

https://1panel.cn/docs/installation/online_installation

4.1 debian

curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && bash quick_start.sh

4.2 ubuntu

curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sudo bash quick_start.sh

5.安装docker-compose

https://github.com/docker/compose/releases

curl -L "https://github.com/docker/compose/releases/download/v2.36.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
docker-compose --version

相关操作

docker-compose -f docker-compose.yml up -d
docker-compose -f docker-compose.yml stop
docker-compose -f docker-compose.yml down

三、配置镜像源

https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

Docker 镜像库国内加速的几种方法

1.镜像源检测脚本

#!/bin/bash
#https://github.com/docker-practice/docker-registry-cn-mirror-test/blob/master/.github/workflows/ci.yaml
docker version
docker info

registrys="
docker.901020.xyz
dockerhub.icu
docker.m.daocloud.io
docker.io
dockerproxy.com
docker.nju.edu.cn
docker.mirrors.sjtug.sjtu.edu.cn
docker.mirrors.ustc.edu.cn
dockerhub.timeweb.cloud
hub-mirror.c.163.com
huecker.io
noohub.ru
mirror.baidubce.com
mirror.gcr.io
registry-1.docker.io
registry.hub.docker.com
ua6hh03f.mirror.aliyuncs.com
"
image="library/nginx:1.25.1-alpine"

for registry in $registrys
do
   echo ::group::Test $registry/$image
   docker pull $registry/$image \
     && (echo -e "\033[32m$registry is good\033[0m" \
        ; echo "::warning file=README.md,line=1,col=0::OK [ $registry ] is good") \
     || (echo -e "\033[31m$registry is outdated\033[0m" \
        ; echo "::error file=README.md,line=1,col=0::X [ $registry ] is outdated")
   docker rmi $registry/$image || true
   echo ::endgroup::
done

2.配置加速源

注意tee会覆盖之前的配置,请备份后操作!!!

tee /etc/docker/daemon.json <<-'EOF'
{
    "registry-mirrors": ["https://docker.901020.xyz"],
    "insecure-registries": ["docker.901020.xyz"],
}
EOF

3.配置代理

注意tee会覆盖之前的配置,请备份后操作!!!

tee /etc/docker/daemon.json <<-'EOF'
{
    "proxies": {
        "http-proxy": "http://xxx.home.love:7890",
        "https-proxy": "http://xxx.home.love:7890",
        "no-proxy": "*.cn,127.0.0.0/8,192.168.0.0/16,172.16.0.0/12,10.0.0.0/8"
    }
}
EOF

4.重启docker生效

systemctl daemon-reload
systemctl restart docker

5.配置系统代理

打开environment文件

nano /etc/environment

粘贴如下配置信息:

HTTPS_PROXY=http://xxx.home.love:7890
HTTP_PROXY=http://xxx.home.love:7890

重启生效

reboot now

四、容器镜像服务

https://cr.console.aliyun.com/cn-hangzhou/instance/dashboard

//登录阿里云Docker
docker login --username=$MY_ALIYUN_DOCKER_USERNAME --password=$MY_ALIYUN_DOCKER_PASSWORD registry.cn-hangzhou.aliyuncs.com

//登录官网Docker
docker login --username=$MY_OFFICIAL_DOCKER_USERNAME --password=$MY_OFFICIAL_DOCKER_PASSWORD

//harbor
docker login --username=admin --password=Harbor12345 harbor.home.love

//artifactory
docker login --username=admin --password=password artifactory.home.love

五、macvlan:妈妈再也不用担心主机端口冲突

https://docs.docker.com/engine/network/drivers/macvlan/

解决了一台主机映射端口可以重复,因为ip不一样了

docker network rm macvlan;
docker network create -d macvlan \
--subnet=192.168.128.0/17 --gateway=192.168.128.1 \
--ip-range=192.168.255.0/24 \
-o parent=eth0 macvlan

为了安全,默认禁用宿主机和macvlan网络相通,解决宿主机和macvlan不通的问题

ip link add mynet link eth0 type macvlan mode bridge
ip addr add 192.168.255.254 dev mynet
ip link set mynet up
ip route add 192.168.255.253 dev mynet

docker通过设置–network、–ip完成macvlan设置

docker rm -f openresty;
docker run --name openresty \
	--network macvlan --ip=192.168.255.253 -dp 80:80 \
	-e TZ=Asia/Shanghai \
	-v /root/openresty/conf/conf.d:/usr/local/openresty/nginx/conf/conf.d \
	-v /root/openresty/conf/nginx.conf:/usr/local/openresty/nginx/conf/nginx.conf \
  	-v /root/openresty/logs:/usr/local/openresty/nginx/logs \
	--restart=always \
openresty/openresty:alpine

docker-compose通过设置networks.macvlan.ipv4_address完成macvlan设置

# https://github.com/firefly-iii/docker/blob/main/docker-compose-importer.yml
version: '3.3'

#
# The Firefly III Data Importer will ask you for the Firefly III URL and a "Client ID".
# You can generate the Client ID at http://localhost/profile (after registering)
# The Firefly III URL is: http://app:8080
#
# Other URL's will give 500 | Server Error
#

services:
  app:
    image: fireflyiii/core:latest
    hostname: app
    container_name: firefly_iii_core
    # networks:
    #   - firefly_iii
    restart: always
    volumes:
      - firefly_iii_upload:/var/www/html/storage/upload
    env_file: .env
    ports:
      - '80:8080'
    networks:
      macvlan:
        ipv4_address: 192.168.255.250

  importer:
    image: fireflyiii/data-importer:latest
    hostname: importer
    restart: always
    container_name: firefly_iii_importer
    # networks:
    #   - firefly_iii
    ports:
      - '81:8080'
    depends_on:
      - app
    env_file: .importer.env
    networks:
      macvlan:
        ipv4_address: 192.168.255.240

  cron:
    #
    # To make this work, set STATIC_CRON_TOKEN in your .env file or as an environment variable and replace REPLACEME below
    # The STATIC_CRON_TOKEN must be *exactly* 32 characters long
    #
    image: alpine
    container_name: firefly_iii_cron
    restart: always
    command: sh -c "echo \"0 3 * * * wget -qO- http://192.168.255.250:8080/api/v1/cron/REPLACEME\" | crontab - && crond -f -L /dev/stdout"
    # networks:
    #   - firefly_iii
volumes:
   firefly_iii_upload:
   firefly_iii_db:

networks:
#   firefly_iii:
#     driver: bridge
  macvlan:
    external: true

六、watchtower:容器自动更新

https://github.com/containrrr/watchtower

https://containrrr.dev/watchtower/

手动运行一次

docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower \
--run-once

定期运行

docker rm -f watchtower;
docker run -d \
--name watchtower \
-e TZ="Asia/Shanghai" \
# -e REPO_USER= \
# -e REPO_PASS= \
-v /var/run/docker.sock:/var/run/docker.sock \
--restart always \
containrrr/watchtower \
--schedule "0 0 1 * * FRI" --cleanup

七、常见问题

1.windows11 docker不断重启

Current version: 4.30.0 (149282)
New version: 4.33.1 (161083) 频繁重启
回滚到之前版本即可,不知道现在还有没有问题了

2.如何开放2375端口?

nano /lib/systemd/system/docker.service

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H 0.0.0.0:2375

3.如何更新docker存储位置

注意tee会覆盖之前的配置,请备份后操作!!!

tee /etc/docker/daemon.json <<-'EOF'
{
  "graph":"/mnt/docker"
}
EOF

4.如何卸载docker?

https://docs.docker.com/engine/install/ubuntu/#uninstall-docker-engine

八、相关文档

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

镜像仓库:https://hub.docker.com/

docker命令:https://docs.docker.com/reference/cli/docker/

docker run命令:https://docs.docker.com/reference/cli/docker/container/run/

docker compose命令:https://docs.docker.com/reference/cli/docker/compose/

dockerd命令:https://docs.docker.com/reference/cli/dockerd/

dockerfile文件编写:
https://docs.docker.com/reference/dockerfile/

docker-compose文件编写:
https://docs.docker.com/reference/compose-file/
https://docs.docker.com/compose/compose-file/compose-file-v3/


网站公告

今日签到

点亮在社区的每一天
去签到