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私有仓库
然后就会看到对应的命令:
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就是对应的机器名。