docker备忘录,docker,Dockerfile,docker-compose速查表
1. 使用docker compose 直接来一套lnmp+*
- docker lnmp 我用的是github上dnmp
- 虽然有这个dnmp,但实际使用中可能会遇到有些扩展安装失败,以及开发调试时需要的一些命令,所以我就改了下php的镜像,以及源
2. 熟悉docker
docker run ubuntu:15.10 /bin/echo "Hello World"
docker
:docker的二进制执行文件run
:与前面docker组合运行一个容器ubuntu:15.10
:指定镜像,首先检查本地是否存在,不存在就从镜像仓库下载/bin/echo "Hello World"
启动容器的命令
- 运行交互式容器
docker run -i -t ubuntu:15.10 /bin/bash
- -t:在新容器内指定一个伪终端
- -i:允许你对容器内的白哦准输入进行交互
- 后台模式
- docker run -d ubuntu:15.10 /bin/sh
docker ps
- CONTAINER ID :容器ID
- IMAGE:使用的镜像
- COMMAND:启动容器时运行的命令
- CREATED:创建容器的时间
- STATUS:容器状态
- created (已创建)
- restarting (重启中)
- running (运行中)
- removing (迁移中)
- paused (暂停)
- exited (停止)
- dead (死亡)
- PORTS:容器的端口信息和连接类型(tcp\udp)
- NAMES:容器名称
- 停止容器
docker stop 4bdba648dfbd
- 可以使用
docker ps
查看
常用命令
- 容器信息
docker version
查看docker版本docker info
查看docker容器信息
- 镜像操作
docker images
列出本地imagesdocker images -a
含中间映像层
- 镜像搜索
docker search mysql
搜索仓库mysql镜像docker search --filter=starts=600 mysql
找starts>=600的镜像docker search --no-trunc mysql
显示镜像完整的描述
- 镜像下载
docker pull redis
下载官方镜像docker pull bitnami/redis
下载私人仓库镜像
- 镜像删除
docker rmi redis
单个镜像删除docker rmi -f redis
强制删除镜像,针对有运行的容器进程docker rmi -f redis tocat nginx
- 镜像构建
- 编写dockerfile
- 构建镜像 ```docker build -f /docker/dockerfile/mycentos -t mycentos:1.1
- 容器操作
- 对容器操作可以是container id 或者names
- 容器启动
- 交互式启动 ```docker run -i -t –name mycentos
- 后台启动
docker run -d mycentos
- 启动一个或多个被停止的容器
docker start redis
docker restart redis
- 容器进程
docker top redis
列出redis容器运行的进程
- 容器日志
docker logs rabbitmq
查看容器日志docker logs -f -t --tail=20 redis
查看最后20条日志 -f 跟踪日志输出 -t显示时间戳docker logs --since="2019-05-21" --tail=10 redis
指定日期后10条日志
- 容器进入与退出
docker run -it centos /bin/bash
进入exit
退出且关闭ctrl+p+q
仅退出容器不关闭docker attach --sig-proxy=false centos
直接进入容器启动命令终端,不会启动新进程,多个attach连接共享容器屏幕, 参数–sig-proxy为了确保ctrl+d
或者ctrl+c
不会关闭容器docker exec -it centos /bin/bash
打开新的交互模式终端
- 查看容器
docker ps
查看正在运行的容器docker ps -q
查看整在运行的容器iddocker ps -a
查看整在运行+历史运行的容器docker ps -s
查看运行容器总文件大小 - 容器停止与删除
docker stop redis
停止一个运行中的容器docker kill redis
杀掉一个运行中的容器docker rm redis
删除一个已停止的容器docker rm -f redis
删除一个运行中的容器docker rm -l db
移除容器间网络连接 连接名为dbdocker rm -v redis
删除容器并且删除挂载的数据卷 - 生成镜像
docker commit -a="DeepInThought" -m="my redis" [redis容器ID] myredis:v1.1
- 基于当前redis容器创建一个新的镜像;参数:-a 提交的镜像作者; -c使用Dockerfile指令来创建镜像;-m:提交时的说明文字;-p:在commit时,将容器暂停
- 容器与主机间的数据拷贝
docker cp rabbitmq:/[container_path] [local_path]
将rabbitmq容器中的文件拷贝至本地路径docker cp [local_path] rabbitmq:/[container_path]
将本地文件拷贝到rabbitmq容器中
Dockerfile
- 构建命令:
docker build -t xbf/hello-nginx .
- 在当前目录构建一个叫xbf/hello-nginx
-
格式:
FROM alpine:latest #基于一个linux版本 MAINTAINER xbf #作者信息 CMD echo 'hello docker' # 运行容器时输出echo内容
-
实战:
FROM ubuntu MAINTAINER xbf RUN se -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list RUN apt-get update RUN apt-get install -y nginx COPY index.html /var/www/html ENTRAYPOINT ["/usr/sbin/nginx", "-g", "daemon off;"] EXPORSE 80
-
Dockerfile 里的命令
命令 用途 FROM base image RUN 执行命令 ADD 添加文件 COPY 拷贝文件 CMD 执行命令 EXPOSE 暴露端口 WORKDIR 指定路径 MAINTAINER 维护者 ENV 设定环境变量 ENTRYPOINT 容器入口 USER 指定用户 VOLUME mount point
Docker Compose
- 常见命令
必须在有docker-compose.yml 目录下
- ps 列出所有运行容器
docker-compose ps
- logs 查看服务日志输出
docker-compose logs
- port 答应绑定的公共端口
docker-compose port php72 9005 #将php72服务9005端口暴露出来
- build 构建或者重新构建服务
docker-compose build php72
- start 启动指定服务已存在的容器
docker-compose start php72
- stop 停止已运行的容器
docker-compose stop php72
- rm 删除指定容器
docker-compose rm php72
- up 构建 启动容器
docker-compose up php72 nginx redis mysql
- kill 通过发送SIGKILL信号来停止制定容器
- pull 下载服务镜像
- scale 设置运行制定容器个数
- run 在一个服务上执行一个命令
docker-compose run php72 /bin/bash
- ps 列出所有运行容器
- docker-compose.yml 属性
- version 指定docker-compose.yml的写法格式
- services: 多容器
- build: 使用Dockerfile来构建镜像
- context: 构建路径
- dockerfile: Dockerfile名称
-
args: 构建参数
-
build: context: . args: PHP_VERSION: ${PHP72_VERSION} ALPINE_REPOSITORIES: ${ALPINE_REPOSITORIES} PHP_EXTENSIONS: ${PHP72_EXTENSIONS} MORE_EXTENSION_INSTALLER: php72.sh
-
command: 覆盖容器里启动后执行的命令
command: [ "php", "./your-script.php" ] command: php ./your-script.php
- dns: 指定dns服务器,支持单行和数组模式
- dns_search 配置dns搜索域 没用过
-
environment 环境变量配置,支持数组或者字典模式
environment: MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD}"
- env_file: env配置文件,一般默认.env,单行或者数组
- expose: 暴露端口给连接服务,跟ports有区别
- image: 指定所用的镜像
-
network_mode: 设置网络模式
network_mode: "bridge" network_mode: "host" network_mode: "none" network_mode: "service:[service name]" network_mode: "container:[container name/id]"
- ports: 对外暴露端口
- links: 设置服务别名,来访问其他容器
- volumes: 挂在文件路径
- logs: 日志输出
- healthcheck 健康检查
- test: [“CMD”, “curl”, “-f”, “http://localhost”] # 设置检- 测程序
- interval: 1m30s # 设置检测间隔
- timeout: 10s # 设置检测超时时间
- retries: 3 # 设置重试次数
- start_period: 40s # 启动后,多少秒开始启动检测程序
- restart
- no 默认,不重启
- always 总是重启
- on-failure 非正常退出时,才会重启
- unless-stopped 容器推出后总是重启
no是需要加双引号的
- stop_signal 设置容器停止信号 默认是SIGTERM
- ulimits 如盖容器默认的ulimit