结合python+redis+mysql制作镜像
国内的一个别人提供的一个公共的镜像仓库
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://hub.docker-alhk.dkdun.com/"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
第1步:编辑Dockerfile
[root@sc-docker-server ~]# mkdir /mydocker/
[root@sc-docker-server ~]# cd /mydocker/
[root@sc-docker-server mydocker]# vim Dockerfile
FROM python:2.7-slim
WORKDIR /app
ADD . /app
RUN pip install --trusted-host pypi.python.org -r requirements.txt
EXPOSE 80
ENV NAME World
ENV AUTHOR cali
CMD ["python","app.py"]
第2步:编辑requirements.txt文件
[root@sc-docker-server mydocker]# vim requirements.txt
Flask
Redis
第3步:编辑app.py程序文件
[root@sc-docker-server mydocker]# vim app.py
from flask import Flask
from redis import Redis, RedisError
import os
import socket
# Connect to Redis
redis = Redis(host="redis", db=0, socket_connect_timeout=2, socket_timeout=2)
app = Flask(__name__)
@app.route("/")
def hello():
try:
visits = redis.incr("counter")
except RedisError:
visits = "<i>cannot connect to Redis, counter disabled</i>"
html = "<h3>Hello {name}!</h3>" \
"<b>Hostname:</b> {hostname}<br/>" \
"<b>Visits:</b> {visits}"
return html.format(name=os.getenv("NAME", "world"), hostname=socket.gethostname(), visits=visits)
if __name__ == "__main__":
app.run(host='0.0.0.0', port=80)
第4步:生成镜像文件
[root@sc-docker-server mydocker]#docker build -t myapp1.0 .
第5步使用镜像,启动容器
docker run -d -p 5080:80 --name sc-hello-1 myapp:1.0
第6步:访问容器的web服务
Hello World!
Hostname: f4aeb5d5305a
Visits: cannot connect to Redis, counter disabled
第7步: 启动redis容器
docker run -d -p 6379:6379 --name redis-1 redis
第8步: 再次启动一个自己制作镜像的容器,链接到redis容器 sc-redis-1是容器的名字 redis 是别名
docker run -d --name myapp-2 -p 5081:80 --link redis-1:redis myapp:1.0
第9步:访问容器的web服务
Hello World!
Hostname: aad7da1892b5
Visits: 15
分别启动2个容器
A容器 --》app程序
B容器 --》提供其他服务,例如:mysql、redis服务等
容器启动起来后都有一个唯一的ip地址,但是ip地址是私网里的
A容器能够找到B容器的方法有哪些?
1.在app程序代码里写上B容器对应的ip地址和端口 ---》go语言的网站
写ip 写域名
2.使用--link链接方式
容器名字和ip地址会写到/etc/hosts
什么叫提供服务?
背后有一个程序一直在允许,可以提供服务,例如: 网站、数据库、文件的访问
阿里云的ACR aliyun cloud register
1.注册阿里云的账号
2.访问ACR控制台--》开通个人服务
3.创建一个命名空间
4.访问命名空间需要密码,设置一个访问密码sc@123456
5.创建一个镜像仓库
3. 将镜像推送到Registry 阿里云
$ docker login --username=aliyun8390986604 registry.cn-guangzhou.aliyuncs.com
$ docker tag 524ff915b071 registry.cn-guangzhou.aliyuncs.com/xiefengbao/myapp:1.0
$ docker push registry.cn-guangzhou.aliyuncs.com/xiefengbao/myapp:1.0
myapp 1.0 524ff915b071
nginx latest bc649bab30d1
[root@docker Dockerfile]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
myapp 1.0 2ba278e9c4a1 3 hours ago 161MB
修改镜像的名字,里面嵌入阿里云私人仓库的地址
[root@docker Dockerfile]#docker tag 2ba278e9c4a1 registry.ap-southeast-1.aliyuncs.com/califeng/myapp:1.0
[root@docker Dockerfile]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
myapp 1.0 2ba278e9c4a1 3 hours ago 161MB
registry.ap-southeast-1.aliyuncs.com/califeng/myapp 1.0 2ba278e9c4a1 3 hours a
上传镜像到阿里云ACR里
[root@docker Dockerfile]# docker push registry.ap-southeast-1.aliyuncs.com/califeng/myapp:1.0