一、认识Docker

Docker

二、Install Docker-CE

  1. 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
    
  2. macOS
     brew install docker
    
  3. 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                   # 运行镜像库中的镜像
    

大宝


乌托邦

xl

Stay hungry, Stay foolish.