Docker使用

下载

先注册,后下载,然后安装
https://www.docker.com/get-started

win10使用docker

如果没有开启hyper-v,docker会提示开启,然后自动重启

双击桌面图标打开docker,登录docker(需要用docker ID登录,而不是邮箱,否则会报Unauthorized: incorrect username or password)

命令行启动容器

docker run -d -t -p 8000:5000 --name demo ubuntu:18.04

  • -d 后台运行
  • -t 让一个空白得ubuntu镜像在后台运行(很少使用)
  • -p 8000:5000 端口映射,本机8000映射到容器5000
  • --name 指定容器名(如 demo
  • ubuntu:18.04 启动容器使用得镜像名(如果没有,就自动从镜像服务器下载,后续就不用下载了)

如果出现端口占用,需要rm -f 强制删除之前使用该端口的容器,可能还需要删除当前没启动成功的容器rm

最小化运行web

  • 基本软件安装

为 demo

docker exec demo apt update
docker exec demo apt -y install python3 python3-pip
docker exec demo pip3 install flask
  • 准备当前电脑当前目录脚本a.py
from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return 'Hello World'

if __name__ == '__main__':
    config = dict(
      host='0.0.0.0',
      debug=True,
    )
    app.run(**config)
  • 复制进demo容器,并运行,然后本机访问localhost:8000
docker exec demo mkdir /code
docker cp a.py "demo:/code/a.py"
docker exec demo python3 /code/a.py
  • 停止demo容器
docker stop demo
# docker 常用命令
docker start demo  #  启动容器
docker stop demo # 停止容器

docker ps # 查看运行中的容器
docker ps -a # 查看所有

docker rm demo # 删除容器
docker rm -f demo # 强制删除

Dockerfile构建镜像

Docker客户端的settings中添加国内源:

链接: https://lug.ustc.edu.cn/wiki/mirrors/help/docker

  • windows:


    image.png
  • Linux:
    /etc/docker/daemon.json 下添加如下配置(没有就新建文件)
{
  "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}

然后重启docker: systemctl restart docker

构建如下文件目录:

image.png

Dockerfile配置如下:

# 指定构建镜像使用的基础镜像
FROM ubuntu:18.04

# 换源
COPY sources.list /etc/apt/sources.list
COPY pip.conf /root/.pip/pip.conf

# 在构建镜像时,在镜像中执行命令
RUN apt-get update
RUN apt-get -y install python3 python3-pip
RUN pip3 install flask

# COPY 类似docker cp
# 将本机当前目录下的app.py复制到/code/app.py
# COPY 自动创建不存在的目录(eg. /code)(docker cp不会)
COPY app.py /code/app.py

# 从镜像启动容器内的工作目录
WORKDIR /code

# 指定容器运行后要执行的命令和参数列表
# 在/code目录下,执行 python3 app.py
CMD ["python3", "app.py"]

# ENTRYPOINT 参数用于指定容器运行后的入口程序(意义不大,可忽略)

sources.list配置如下:

deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse

pip.conf配置如下:

[global]
trusted-host = mirrors.aliyun.com
index-url = https://mirrors.aliyun.com/pypi/simple

app.py文件如下:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return 'hello from webimage'

if __name__ == '__main__':
    config = dict(
        host='0.0.0.0',
        debug=True
    )
    app.run(**config)
  • 执行构建镜像命令: docker build -t .
  • 基于上面的镜像运行容器: docker run -p 8000:5000 --name

如果构建镜像失败,需要先删除容器,再删除镜像
1. docker ps -a
2. docker rm
3. docker images
4. docker rmi

服务器安装 Docker

官方链接: https://docs.docker.com/install/linux/docker-ce/centos/

  1. 卸载旧版本Docker
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine
  1. 安装依赖包
sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2
  1. 设置官方 Docker 源
sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
  1. 安装 Docker
sudo yum install docker-ce
  1. 启动 Docker
sudo systemctl start docker
  1. 验证(可选)
docker run hello-world

数据卷

常用命令:

# 创建
docker volume create 
# 列出所有
docker volume ls
# 删除
docker volume rm 

使用数据卷:

# 创建数据卷
docker volume create web
# 运行容器时,把本地数据卷挂载到容器的/volume目录下
# 当容器本删除后,/volume目录的内容依然存在
docker run -d --name demovolume --mount source=web,target=/volume webimage
# 另一个容器使用同样的数据卷
docker run -d --name demovolume2 --mount source=web,target=/volume2 webimage

共享目录

 docker run -p 8080:80 \
    --name nginx1 \
    --mount type=bind,source="${PWD}",target=/usr/share/nginx/html/ \
    nginx
# --mount的type=bind参数,表示要挂载的共享目录
# source必须时绝对路径
# "{PWD}"获取当前目录路径,多平台可用
# windows下需要用Powershell,加双引号,防止路径包含空格报错

# 挂载多个
docker run -p 8080:80 \
    --name nginx1 \
    --mount type=bind,source="${PWD}",target=/usr/share/nginx/html/ \
    --mount type=bind, source="${PWD}/test.html",target=/usr/share/nginx/html/index.html \
    --mount ...\
    nginx

出现Error response from daemon: Drive has not been shared.错误时,需要在Docker客户端设置共享磁盘,

image.png

你可能感兴趣的:(Docker使用)