Docker使用

作者: 霡霂976447044 | 来源:发表于2019-02-26 13:21 被阅读20次

    本文基于Linux Mint19操作系统环境。

    1. 配置

    apt失败则下载deb文件安装,下载deb文件 根据官方教程, https://docs.docker.com/get-started/#test-docker-installation
    安装好之后,添加docker组。

    sudo groupadd docker
    sudo usermod -aG docker $USER
    

    2. docker镜像

    2.1加速镜像

    使用国内镜像比较快, Ubuntu

    sudo vim /etc/docker/daemon.json
    

    输入如下

    {
        "registry-mirrors": [
            "https://registry.docker-cn.com"
        ]
    }
    

    2.2 镜像操作

    • 获取
    docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
    docker pull ubuntu:16.06
    
    • 列出本地镜像
    docker images # docker image ls 等同
    
    • 运行为容器并且结束后删除容器
    docker run -it --rm ubuntu:16.04 bash # bash表示运行的容器命令
    docker run --name webserver -d -p 80:80 nginx # -p 指定端口 后台运行 结束不删除
    docker run -it -p 5000:5000  --rm 2b7
    docker run -it --mount type=bind,source=/home/alonebo,target=/home/alonebo ubuntu:16.04 bash
    
    • 删除镜像
    docker image rm [选项] <镜像/镜像ID/摘要等> [<镜像2> ...]
    docker image rm ubuntu:16.04
    

    2.3 Dockerfile创建镜像

    Demo: 创建nginx的镜像

    # 编写Dockerfile
    mkdir mynginx
    cd mynginx
    touch Dockerfile
    vi Dockerfile  # 写入下面两行到文件
        FROM nginx
        run echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
    # 构建为镜像
    docker build -t nginx:v3 .
    

    Dockerfile参数:

    • CMD 容器启动参数 CMD [ "sh", "-c", "echo $HOME" ]

    • WORKDIR 指定工作目录

    • ENTRYPOINT 入口点 指定了ENTRYPOINT后可以在启动时传递参数

    另一个Dockerfile Demo

        # <ENTRYPOINT> "<CMD>"
        # Dockerfile
        FROM ubuntu:16.04
        RUN apt-get update \
        && apt-get install -y curl \
        && rm -rf /var/lib/apt/lists/*
        ENTRYPOINT [ "curl", "-s", "http://ip.cn" ]
    

    Run:

    $ docker run myip -i  #给curl添加 -i参数
    

    3. docker容器操作

    3.1 启动镜像为容器

    docker run ubuntu:16.04 /bin/echo 'hello docker' # > hello docker
    docker run -it ubuntu:16.04 /bin/bash # > root@xxx:/#...
    

    3.2 以镜像来后台运行容器(程序执行完 容器也跟着停止)

    docker run -d ubuntu:16.04 /bin/echo 'hello docker' # > nothing
    

    3.3 显示所有容器状态

    docker container ls -a
    
      CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
      ef6e2bcd8355        ubuntu:16.04        "/bin/echo 'hello do…"   53 seconds ago      Exited (0) 52 seconds ago                       compassionate_ramanujan
    

    3.5 启动一个容器 如何启动取决于一开始镜像如何启动

      docker container start [OPTIONS] CONTAINER [CONTAINER...]
      docker container start 容器ID
    

    3.6 停止容器

    docker container stop CONTAINER_ID
    

    进入容器

    docker exec -it 69d1 bash
    

    删除容器

      docker container rm CONTAINER
      docker container prune
    

    4. Docker-Compose

    定义和运行多个 Docker 容器的应用

    4.1 安装

    curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
      chmod +x /usr/local/bin/docker-compose
    

    4.2 Demo

    app.py

      from flask import Flask
      from redis import Redis
      app = Flask(__name__)
      redis = Redis(host='redis', port=6379)
      @app.route('/')
      def hello():
          count = redis.incr('hits')
          return 'Hello World! 该页面已被访问 {} 次。\n'.format(count)
      if __name__ == "__main__":
          app.run(host="0.0.0.0", debug=True)
    

    Dockerfile

      FROM python:3.6-alpine
      ADD . /code
      WORKDIR /code
      RUN pip install redis flask
      CMD ["python", "app.py"]
    

    docker-compose.yml tab要为空格键

     version: '3'
      services:
          web:
              build: .
              ports:
                - "5000:5000"
          redis:
              image: "redis:alpine"
    

    4.5 运行

    docker-compose up
    

    4.6 配置文件参数

    ports 使用宿主端口:容器端口(HOST:CONTAINER)格式,或者仅仅指定容器的端口(宿主将会随机选择端口)都可以。

    ports:
        - "3000"
        - "8000:8000"
        - "49100:22"
        - "127.0.0.1: 8001:8001"
    

    volumes 数据卷所挂载路径设置

    volumes:
    - /var/lib/mysql
    - cache/:/tmp/cache
    - ~/configs:/etc/configs/:ro
    

    设置主机的cache目录到容器的/tmp/cache目录

    environment 设置环境变量。你可以使用数组或字典两种格式

    postgres:
      image: postgres:10.3
      environment:
        POSTGRES_USER: blog
        POSTGRES_PASSWORD: blog
        POSTGRES_DB: blog
      ports:
        - "3306"
    

    depends_on 解决容器的依赖、启动先后的问题。以下例子中会先启动redisdb再启动web

    version: '3'
    services:
        web:
            build: .
            depends_on:
              - db
              - redis
        redis:
            image: redis
        db:
            image: postgres
    

    可能会遇到的错误

    服务器部署安装Docker出现libltdl.so.7缺失

    docker: error while loading shared libraries: libltdl.so.7:
    

    解决:

    sudo apt-get install -y libltdl7
    

    相关文章

      网友评论

        本文标题:Docker使用

        本文链接:https://www.haomeiwen.com/subject/xprayqtx.html