Docker教程


Docker镜像命名规则

Docker镜像的命名规则:registryDomain/imageName:tag

因此,前面使用的docker命令:

bash
docker pull mongo

就等同于:

bash
docker pull docker.io/library/mongo

在AWS ECR中创建Docker私有仓库

在创建Docker私有仓库的时候,有很多选择,比如AWS ECR,Azure ACR,Digital Ocean等等,下面以AWS ECR为例。

首先在AWS ECR中创建一个私有仓库,名称选择自己APP的名字。需要注意的是,在AWS ECR中,每个镜像都有一个专门的Repository。

然后选择“View Push Command”:

Docker私有仓库
Docker私有仓库

然后就会看到对应的命令:

bash
aws ecr get-login-password --region eu-west-1 | docker login --username AWS --password-stdin xxxxxxxx.dkr.ecr.eu-west-1.amazonaws.com
docker build -t lcoding-demo .
docker tag lcoding-demo:latest xxxxxxxx.dkr.ecr.eu-west-1.amazonaws.com/lcoding-demo:latest
docker push xxxxxxxx.dkr.ecr.eu-west-1.amazonaws.com/lcoding-demo:latest

搭建自己的私有Docker镜像仓库

拉取并启动registry容器:

bash
docker pull registry
docker run -d -p 5000:5000 -v /home/lcoding/myregistry:/tmp/registry --privileged=true registry

回到host进行测试:

bash
curl -XGET http://127.0.0.1:5000/v2/_catalog

添加新tag:

bash
docker tag lcoding/redis:7.0.4 127.0.0.1:5000/lcoding/redis:7.0.4

由于在默认方式下,docker不支持http方式推送到仓库,因此需要添加/更新文件:/etc/docker/daemon.json:

json
{
  "insecure-registries": ["127.0.0.1:5000"]
}

将自己的镜像推送到私有镜像仓库:

bash
docker push 127.0.0.1:5000/lcoding/redis:7.0.4

再次查看私有镜像仓库:

bash
curl -XGET http://127.0.0.1:5000/v2/_catalog

其运行结果为:

bash
{"repositories":["lcoding/redis"]}

删除本地的镜像后,重新从私有镜像服务器拉取:

bash
docker pull 127.0.0.1:5000/lcoding/redis:7.0.4

部署多个容器

假设应用中需要使用如下的镜像:

  • mongo:公共镜像
  • mongo-express:公共镜像
  • lcoding-demo:AWS ECR私有镜像

那么就可以使用docker compose来同时部署这几个容器到对应的服务器:

yaml
version: '3'
services:
  lcoding-demo:
    image: xxxxxxxx.dkr.ecr.eu-west-1.amazonaws.com/lcoding-demo:1.0
    ports:
      - 3000:3000
  mongodb:
    image: mongo
    ports:
      - 27017:27017
    environment:
      - MONGO_INITDB_ROOT_USERNAME=admin
      - MONGO_INITDB_ROOT_PASSWORD=12345
  mongo-express:
    image: mongo-express
    ports:
      - 8081:8081
    environment:
      - ME_CONFIG_MONGODB_ADMINUSERNAME=admin
      - ME_CONFIG_MONGODB_ADMINPASSWORD=12345
      - ME_CONFIG_MONGODB_SERVER=mongodb

但需要注意的是,在使用私有仓库的时候需要先进行登录验证。

另外,在应用中连接MongoDB时,可以使用localhost,也可以使用mongodb,因为在Docker网络中,mongodb就是对应的机器名。


文章作者: 逻思
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明来源 逻思 !