Docker 容器管理

docker 安装

国内源

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun 
#部分地区无法访问get.docker.com,可以用下面这种方式
curl -fsSL https://proxy.xiaoyue.pro/https://get.docker.com  | bash -s docker --mirror Aliyun 

国外源

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

docker常用命令

systemctl enable docker              #自启
systemctl disable docker             #关闭开机自启
systemctl start docker               #运行docker服务
systemctl stop docker                #关闭docker服务
systemctl restart docker             #重启docker服务

docker start|stop|restart <id| name> #打开|关闭|重启容器
docker ps                            #查看正在运行的docker
docker rm  <id| name>                #删除容器
docker inspect <id| name>            #查看容器配置
docker exec -it <id| name> /bin/bash #进入容器执行/bin/bash


docker images                        #列出本地存储的镜像。
docker pull IMAGE                    #从镜像仓库拉取镜像。
docker push IMAGE                    #将镜像推送到镜像仓库。
docker rmi IMAGE                     #删除一个或多个镜像。

#docker cp复制文件到容器内
docker cp <localdir> <id|name>:<dockerdir>
docker cp /tem/demo.txt mydocker:/opt/demo.txt

docker 加速

WARNING

2024.06.06国内docker镜像站基本全灭,已搭建docker.xiaoyue.pro加速docker

#比如安装拉取镜像nginx,使用完整路径,或者换源
docker pull nginx       
docker pull docker.xiaoyue.pro/library/nginx:latest

docker 换源

国内源,但是好像全挂了,做了个docker源反向代理了docker.io
中科大源:https://docker.mirrors.ustc.edu.cn
网易源: https://hub-mirror.c.163.com
百度源: https://mirror.baidubce.com
腾讯源: https://ccr.ccs.tencentyun.com
修改文件vim /etc/docker/daemon.json

{
    "registry-mirrors": [
        "https://docker.xiaoyue.pro"
    ]
}

修改完成后重启docker服务即可 systemctl restart docker

常用容器部署

jellyfin

sudo docker run -d --name jellyfin \
-v /volume1/docker/jellyfin/config:/config \
-v /volume1/docker/jellyfin/cache:/cache \
-v /volume1/video:/video \
-p 8096:8096 \
--device /dev/dri/renderD128:/dev/dri/renderD128 \
--device /dev/dri/card0:/dev/dri/card0   \
--restart unless-stopped \
jellyfin/jellyfin

mysql 5.7

提示

使用docker安装时,本地连接到mysql地址可以用127.0.0.1但不能用localhost
默认允许全部网络

docker run --name mysql5.7 \
-v /volume1/docker/mysql:/var/lib/mysql \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7

watchtower更新容器

提示

用于更新容器以jellfin为例

docker run -d \
--name watchtower \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower --cleanup --run-once jellyfin #指定容器名称

Docker 完全卸载

WARNING

操作前请确认数据已备份

1.停止所有运行的容器

docker stop $(docker ps -aq)

2.删除所有容器

docker rm $(docker ps -aq)

3.删除所有镜像

 docker rmi $(docker images -q)

4.列出docker相关的包

# debian 系列
dpkg -l |grep docker
# redhat 系列
yum list installed | grep docker

5.卸载和docker相关的组件

# debian 系列
apt remove docker*
# redhat 系列
yum remove docker*

docker-compose

docker-compose 主要用于同时管理多个docker容器

安装docker-compose

apt install docker-compose

启动前请确定所在目录存在docker-compose.yml

docker-compose up -d  #up启动-d后台执行
docker-compose down   #停止

提示

一般情况下docker-compose会自动创建一个bridge网桥,有可能会与内网部分网段重叠影响使用,可编辑docker-compose.yml指定网段

version: '3'

networks:
  networkname:                     #创建一个networkname的网桥
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 10.100.100.0/24  #指定网段,一般24位就足够用了
services:
  nginx:
    image: xxx
    restart: always # 设置容器自启模式
    ports:
      - '80:80'
    networks:
      - networkname                 #引用networkname网桥

批量查询容器自启动状态

# 批量查询容器自启动状态
docker ps -aq | xargs -I {} docker inspect --format '{{.Name}}: {{.HostConfig.RestartPolicy.Name}}' {}
#查询指定容器自启动状态
docker inspect --format '{{.HostConfig.RestartPolicy}}'  容器名
#指定容器指定自启动
docker update --restart=always 容器名