下载
先注册,后下载,然后安装
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 <container name>
指定容器名(如demo
) -
ubuntu:18.04
启动容器使用得镜像名(如果没有,就自动从镜像服务器下载,后续就不用下载了)
如果出现端口占用,需要
rm -f <container name>
强制删除之前使用该端口的容器,可能还需要删除当前没启动成功的容器rm <new-container name>
最小化运行web
- 基本软件安装
<container-name> 为 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.pngDockerfile
配置如下:
# 指定构建镜像使用的基础镜像
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 <image name> .
- 基于上面的镜像运行容器:
docker run -p 8000:5000 --name <container name> <image name>
如果构建镜像失败,需要先删除容器,再删除镜像
1.docker ps -a
2.docker rm <container id>
3.docker images
4.docker rmi <image id>
服务器安装 Docker
官方链接: https://docs.docker.com/install/linux/docker-ce/centos/
- 卸载旧版本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
- 安装依赖包
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
- 设置官方 Docker 源
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
- 安装 Docker
sudo yum install docker-ce
- 启动 Docker
sudo systemctl start docker
- 验证(可选)
docker run hello-world
数据卷
常用命令:
# 创建
docker volume create <volume name>
# 列出所有
docker volume ls
# 删除
docker volume rm <volume name>
使用数据卷:
# 创建数据卷
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
出现
image.pngError response from daemon: Drive has not been shared.
错误时,需要在Docker客户端设置共享磁盘,
网友评论