April
28th,
2018
一、认识Docker
二、Install Docker-CE
- Linux以Centos为例
#Centos7 yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yum install docker-ce #Centos6 rpm -iUvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm yum install docker-io 镜像加速 /etc/docker/daemon.json { "registry-mirrors": ["https://registry.docker-cn.com"] } service docker start 查看Docker版本 docker -v docker run hello-world
- macOS
brew install docker
- Windows
三、容器,运行第1个程序
- Dockerfile
# 将官方 Python 运行时用作父镜像 FROM python:2.7-slim # 将工作目录设置为 /app WORKDIR /app # 将当前目录内容复制到位于 /app 中的容器中 ADD . /app # 安装 requirements.txt 中指定的任何所需软件包 RUN pip install -r requirements.txt # 使端口 80 可供此容器外的环境使用 EXPOSE 80 # 定义环境变量 ENV NAME World # 在容器启动时运行 app.py CMD ["python", "app.py"]
- requirements.txt
Flask Redis
- 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)
- 构建运行
docker build -t hello_docker . docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE hello_docker latest 940a583806b0 4 minutes ago 155.6 MB docker run -p 888:80 hello_docker 后台运行 docker run -d -p 888:80 hello_docker docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 73e81f97609c hello_docker "python app.py" 57 seconds ago Up 56 seconds 0.0.0.0:888->80/tcp gloomy_tesla docker stop 73e81f97609c
- 共享镜像
docker login docker tag hello_docker raina7325/get-started:part1 docker push raina7325/get-started:part1 docker run -p 8888:80 raina7325/get-started:part1
- 常用命令
docker build -t friendlyname .# 使用此目录的 Dockerfile 创建镜像 docker run -p 4000:80 friendlyname # 运行端口 4000 到 90 的“友好名称”映射 docker run -d -p 4000:80 friendlyname # 内容相同,但在分离模式下 docker ps # 查看所有正在运行的容器的列表 docker stop <hash> # 平稳地停止指定的容器 docker ps -a # 查看所有容器的列表,甚至包含未运行的容器 docker kill <hash> # 强制关闭指定的容器 docker rm <hash> # 从此机器中删除指定的容器 docker rm $(docker ps -a -q) # 从此机器中删除所有容器 docker images -a # 显示此机器上的所有镜像 docker rmi <imagename> # 从此机器中删除指定的镜像 docker rmi $(docker images -q) # 从此机器中删除所有镜像 docker login # 使用您的 Docker 凭证登录此 CLI 会话 docker tag <image> username/repository:tag # 标记 <image> 以上传到镜像库 docker push username/repository:tag # 将已标记的镜像上传到镜像库 docker run username/repository:tag # 运行镜像库中的镜像