基础
启动容器
docker run -d -t -p 8000:5000 --name demo ubuntu:18.04
run
表示启动一个新的 Docker 容器-d
的意思是让容易在后台运行-t
用于让一个空白的ubuntu镜像在后台运行-p
用于指定端口映射,表示在访问本机的8000会被转到容器的5000--name XXX
指定了容器的名字是 demo
ubuntu:18.04
是启动容器使用的镜像名, Docker 会自动去镜像服务器去下载这个镜像`解决端口或容器名被占用的方案
docker rm -f XXX
端口占用时需要加 -f 表示强制删除正在运行的容器,名字占用时不用加控制容器
docker exec CONTAINER COMMAND
复制数据到容器
docker cp FILE "CONTAINER:PATH"
常用操作
docker start XXX
启动容器docker ps
查看运行的容器,-a
可以查看所有容器docker stop XXX
停止容器docker rm -f XXX
停止镜像
Dockerfile(附录: Dockerfile Sample)
#
注释FROM
指定源镜像 ->FROM ubuntu:18.04
RUN
构建时在镜像中执行的命令 ->RUN apt update
COPY
复制,会自动创建不存在的目录 ->COPY app.py /code/app.py
WORKDIR
用于指定工作目录 ->WORKDIR /code
CMD
启动脚本 ->CMD ["python3", "app.py"]
构建镜像
docker build -t XXX .
,最后有一个.
用来指定构建镜像时的目录为本机当前目录docker images
, 查看本机存储的镜像docker run -p 8001:5000 --name demo2 webimage
服务器 Docker 部署
- 准备三个文件放于 app 目录下( 附录: install-docker.sh )
install-docker.sh
在 Ubuntu 服务器安装 Docker 的脚本Dockerfile
app.py
web程序- 使用
scp -r app ubuntu@ip:/tmp
把文件夹上传到服务器sh /tmp/app/install-docker.sh
安装 dockersudo docker build -t webimage .
打包sudo docker run -d -p 8000:5000 --name server webimage
数据卷
docker volume create XXX
创建数据卷docker volume ls
列出所有数据卷docker volume rm XXX
删除某个数据卷- 在
docker run
的时候添加--mount source=XXX,target=/volume
使用数据卷共享目录
- 运行一个使用共享目录的 nginx 容器:
--mount type=bind, source="${PWD}",target=/usr/share/nginx/html/
"${PWD}"
跨平台的绝对路径获取方式,加引号防空格- 也可以通过指定文件的方式挂载单文件:
--mount type=bind, source="${PWD}/index.html",target=/usr/share/nginx/html/ test.html
- 也可以通过多个
--mount
参数挂载多个文件多容器交互: Compose
Dockerfile Sample:
# 在 Dockerfile 文件中 # 是注释 # FROM 用于指定构建镜像使用的基础镜像 FROM ubuntu:18.04 # RUN 用于在构建镜像的时候在镜像中执行命令 # 这里我们安装 python3 和 flask web 框架 RUN apt update RUN apt -y install python3 python3-pip RUN pip3 install flask # COPY 相当于命令的 docker cp # 把本机当前目录下的 app.py 文件拷贝到镜像的 /code/app.py # 和 docker cp 不同的是,COPY 会自动创建镜像中不存在的目录,比如 /code COPY app.py /code/app.py # WORKDIR 用于指定从镜像启动的容器内的工作目录 WORKDIR /code # CMD 用于指定容器运行后要执行的命令和参数列表 # 这样从本镜像启动容器后会自动执行 python3 app.py 这个命令 # 由于我们已经用 WORKDIR 指定了容器的工作目录 # 所以下面的命令都是在 /code 下执行的 CMD ["python3", "app.py"] # 你可能会看到有资料介绍一个 ENTRYPOINT 参数用于指定容器运行后的入口程序 # 但是这个参数在现在的意义已经很小了,请忽略之
install-docker.sh Sample:
# 官方安装指南 Ubuntu 版本 # https://docs.docker.com/install/linux/docker-ce/ubuntu sudo apt update # docker 的源是 https,所以安装这些软件用于支持 https 的 apt 仓库 sudo apt install -y apt-transport-https ca-certificates curl software-properties-common # 添加 Docker 的官方 GPG key curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - # 设置官方 Docker 源 sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable" # 安装 Docker sudo apt update sudo apt install -y docker-ce # 如果你想验证 Docker 安装好了,可以运行一个 hello-world 容器 # sudo docker run hello-world
Docker 基础命令
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 《Docker从入门到实践》阅读笔记 原书地址: https://yeasy.gitbooks.io/docker...
- 劫后余生是一种怎样的体验? 这个答案真是深得民心,现在回想起学生时代被老师提问的情景,还心有余悸。 英语老师一说出...