初探 Docker

常用命令

# 添加用户到 docker 用户组
sudo groupadd docker

# 查看磁盘使用情况
docker system df

# 安全清理(保留最近使用的资源)
docker system prune

# 清理所有未使用的镜像、容器、网络和构建缓存
docker system prune -a

# 强制清理(不提示确认)
docker system prune -a -f

# 清理悬空镜像
docker image prune

# 清理构建缓存
docker builder prune

分割线

初识

  • 首先Docker是啥就不解释了.

  • 初探尝试安装时出现下面好几个选择,于是搜了搜~

    20210131002505
  • 找到 docker 家族有几个特殊的工具docker-Dockerfile, docker-compose, docker-machine

    20210131004332

docker-Dockerfile

Docker Dockerfile
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。


docker-compose

docker 与 docker-compose 区别
docker 是一个容器,你如果要是安装服务也是要单独一个一个的安装,如果你使用了 docker-compose 的话 就可以使用一个 docker-compose.yml 脚本一键安装
说来其是管理同一个 docker 下多个服务的.


docker-machine

Docker 三剑客之 docker-machine
这个是用来管理多个 docker 的.

分割线

安装启动

Windows

Ubuntu-Server

分割线

加速

镜像加速

阿里的镜像服务虽然是能访问, 但是已经停止更新了…

  • 登录阿里云并找到容器镜像服务

  • 阿里会给一个加速地址,把地址复制到 Docker 设置里就可.

Windows

20210205010825

设置代理

docker-本身代理

国内网络环境拉取镜像非常慢,挂代理可以快很多. (不过一般配置了上面的镜像加速就用不着配置代理了)

docker desktop 设置里操作, localhost:7890

docker-容器使用宿主机代理

比如在 docker 里跑了虚拟机 (docker-osx, 默认是桥接网络实际用起来是没有科学的

可以选择在创建容器时 --net=host 使用主机网络, 但不如:

host.docker.internal 指向宿主机内网 IP, proxy 可以直接写为 host.docker.internal:7890

分割线

docker 管理

VScode-docker

  • 在 Manjaro 虚拟机中启动 docker 服务,然后用 vscode-ssh 连接 manjaro

  • 安装 docker 插件,就可以享受比较方便的可视化了(个人非常喜欢这种方式)

    20210206153528
  • 另外再安装Resource Monitor这个插件可以监控远程机资源消耗(如上图最下方)


Portainer

Docker 安装管理面板–Portainer

  • docker 的可视化工具,可连接本地和远程,支持集群,有很多部署方式,这里选择直接在 docker 部署.

  • 首先它需要一个volume(数据卷),新建

    docker volume create portainer_data
  • 然后拉取并运行

    • 需要保证 9000 端口没被占用,不然无法运行
    docker run -d --name portainer --restart always -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
  • 浏览器打开 localhost:9000

  • 官网上的版本要比 github 的 tag 慢一些,左下角提示更新可以无视~

分割线

常用命令

命令行执行

有些文档的命令是这样, 行末的 '' 是 shell 的换行符, windows 不支持, 删掉就好

docker run -d \
  -p 8088:8088 \
  --name next-terminal \
  --restart always ghcr.io/dushixiang/next-terminal:latest

docker run -d -p 8088:8088 --name next-terminal --restart always ghcr.io/dushixiang/next-terminal:latest

💧 一些常用终端命令.#docker

docker 自启

  • 启动服务

    sudo systemctl start docker.service
  • 开机自动启动 docker 服务

    sudo systemctl enable docker.service
  • 重新载入配置

    sudo systemctl daemon-reload
  • 重启 docker

    sudo systemctl restart docker

容器自启

# 开启
docker update --restart=always <CONTAINER ID>

# 关闭
docker update --restart=no <CONTAINER ID>

分割线

使用案例

多数据库管理

  • 开发时需要好几个不同的数据库

    1. 在 win 主机上安装配置的话,必然各种 bug,大部分时间还空浪费性能

    2. 于是考虑在虚拟机上装,但是鉴于各种系统环境还不一样,每个数据库挨个配置和解决 bug 都废手

    3. 于是让数据库进入 docker

  • 通过 docker-compose.yml 一条龙管理 (免去了每个数据库安装,开通远程连接,配置账户这些麻烦)

    version: "3.1"
    services:
    # redis 无密码
    redis:
    image: redis:latest
    restart: always
    container_name: "redis-app"
    command: redis-server /usr/local/etc/redis/redis.conf
    ports:
    - 6379:6379
    volumes:
    - ./redis.conf:/usr/local/etc/redis/redis.conf
    - /data/redis:/data
    # mongo root-2333
    mongo:
    image: mongo:latest
    restart: always
    container_name: "mongo-app"
    environment:
    MONGO_INITDB_ROOT_USERNAME: root
    MONGO_INITDB_ROOT_PASSWORD: 2333
    ports:
    - 27017:27017
    volumes:
    - /data/mongo:/etc/mongo
    # mariadb root-2333
    mariadb:
    image: mariadb:latest
    restart: always
    container_name: "mariadb-app"
    ports:
    # 端口映射
    - 3306:3306
    volumes:
    # 容器与宿主机时间同步
    - /etc/localtime:/etc/localtime
    # 数据库目录映射
    - ./config/mariadb:/var/lib/mysql
    # (推荐)如果要使用自定义的MySQL配置,则可以在主机上的目录中创建备用配置文件,然后将该目录位置/etc/mysql/conf.d安装在mariadb容器内。自己所需的配置文件可以放在自己服务器./config/data/mariadb-config里面
    - ./config/mariadb-config:/etc/mysql/conf.d
    environment:
    TIME_ZONE: Asia/Shanghai
    MYSQL_ROOT_PASSWORD: 2333

    进此配置目录执行 docker-compose up, ->最新文件地址<-


docker-osx

记一下我做的配置更改, 备忘

  1. 设置-网络-代理
    1. host.docker.internal:7890
  2. 修改 /etc/hosts
    1. github520
  3. 安装 homebrew