我用 LinuxDocker容器

Docker使用

2019-02-26  本文已影响20人  霡霂976447044

本文基于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参数:

另一个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
上一篇下一篇

猜你喜欢

热点阅读