参考教程:Docker——从入门到实践
官方文档;命令行详解
镜像 image
- 拉取/下载镜像:
docker pull 镜像名:docker pull ubuntu:18.04 - 列出所有下载镜像:
docker image ls - 删除镜像:
docker image rm 镜像短ID/镜像名- 当有容器在使用该镜像时,镜像是无法删除的
- 根据Dockerfile构建镜像:
docker build -t nginx:v3 .- 指定最终镜像名称为 -t nginx:v3
.表示镜像构建上下文,Docker引擎会收到该路径下的所有文件,所以不需要的文件最好写在.dockerignore里,不然会一起打包发给Docker引擎-f ../Dockerfile.php:指定Dockerfile的位置和名字,不写的话默认是将上下文目录下的名为Dockerfile的文件作为 Dockerfile。
容器 container 操作命令
镜像运行之后就成了容器
- 显示所有状态的容器:
docker ps -acreated|restarting|running|removing|paused|exited|dead
- 显示正在运行的容器:
docker ps - 基于一个镜像新建一个容器:
docker run -it 镜像名docker run -it python:3.8.5 bash- 放在镜像名后的是命令,-之后的是参数
-it bash表示希望有个交互式Shell:-t选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上,-i则让容器的标准输入保持打开。--rm:这个参数是说容器退出后随之将其删除。-h:设置hostname-v:设置数据卷。通过-v参数可进行目录挂载。冒号前为宿主机目录,冒号后为镜像容器内挂载的路径,两者必须为绝对路径。如果没有指定宿主机的目录,则容器会在/var/lib/docker/volumes/随机配置一个目录。--name:设置容器名
- 启动已终止容器:
docker container start 容器名 - 守护态运行
-d:此时容器会在后台运行并不会把输出的结果 (STDOUT) 打印到宿主机上面,即容器启动后会进入后台docker container logs [container ID or NAMES]:获取容器输出信息
- 终止容器:
docker container stop- 或者在终端运行时
exit或者Ctrl+d
- 或者在终端运行时
- 进入容器操作:
docker attach 容器id:eixt时,容器会停止docker exec -it 容器id bash:exit时,容器不会停止
- 删除容器:
docker container rm 容器id只能删除终止状态的容器-f:删除运行中的容器
docker compose
docker-compose.yml所在文件目录运行
docker-compose up:启动所有需要的容器,当之前已经启动过,再使用启动的也是启动之前已经用dockerfile创建好的image镜像,通过CTRL+C停止所有容器,停止命令。- 若运行该命令前,所有容器都已在运行中,该命令可以进入打印所有容器状态的模式中,且不会暂停再重启容器(猜想)
docker-compose up启动时,如果docker-compose.yml文件有变动,它会针对这个文件的变动形成不同的构建(猜想)。但如果对某一镜像的dockerfile进行改变,该命令使用的还是老的dockerfile构建的镜像。如果重新构建镜像,使用docker-compose build命令- 生产环境下使用
-d在后台运行所有容器,不然都在前台启动并打印容器信息
docker-compose run:
在指定服务上执行一个命令,比如用up命令开启一个项目后,需要迁移数据库的,就另开一个cmd用这个命令makemigrations。那我的理解就是,这时候并不会新开一个容器,而是相当于在原来已经启动的容器里操作。docker-compose run后跟的是docker-compose.yml文件中服务的名字,并不是容器名。docker exec后跟的是容器名
docker-compose run web python manage.py syncdb:django示例里面的示范docker-compose run --rm app python manage.py migratedocker exec -it docker_nginx_uwsgi_web_1 /bin/bash start.sh:在指定容器里执行内容。比如这句就是为了django项目使用migrate命令用的
docker-compose down:停止所有容器并移除网络。这个操作和ctrl+c不太一样,这个操作会remove所有容器,但ctrl+c应该只是暂停容器,下次再up,开始的还是之前使用过的容器,里面的数据也不会消失。
docker-compose logs [SERVICE...]:查看容器输出
文件命令
web:
build: .
ports: #绑定容器的端口到主机的端口,(猜测:相当于暴露吗)
- "5000:5000"
# (host:container)
depends_on: #解决容器依赖、启动先后的问题
- db
- redis
expose: #暴露本容器的端口给项目中连接本容器的容器
- "5000"
5万+

被折叠的 条评论
为什么被折叠?



