涉及站点
Docker 官网: https://www.docker.com/
Docker 文档: https://docs.docker.com/get-started/
Docker Hub: https://hub.docker.com/
Docker 中文社区: http://dockone.io/
GitHub Docker Resources (Star 1.2K +): https://github.com/hangyan/docker-resources
基本概念
...
涉及目录
/var/lib/docker
containers 目录: /var/lib/docker/containers
images 目录: /var/lib/docker/image
network 目录: /var/lib/docker/network
...
/var/docker/packages
/etc/docker/
配置文件: /etc/docker/daemon.json
KEY 文件: /etc/docker/key.json
...
...
Docker 命令
CentOS 7 安装 Docker
sudo yum install -y docker
Docker 开机自启
chkconfig docker on
Docker 手动启动
service docker start
Docker 手动停止
service docker stop
Docker 版本
docker version
参考 Docker base command : https://docs.docker.com/engine/reference/commandline/docker/
docker info # 查看 docker 详细信息
docker search *** # 搜索 镜像名称 中包含 *** 的镜像 (Images)
docker search nginx
docker search redis
docker pull *** # 下载镜像
docker pull redis
docker pull redis:latest
参考 Docker Hub --> Redis : https://hub.docker.com/_/redis/
docker images # 查看已下载镜像列表
docker run *** # 运行镜像
docker run --name redis -d -p 6379:6379 redis
docker ps
docker ps # 默认显示当前运行容器
docker ps -a # 显示全部容器
docker ps --help # 命令帮助
docker stop 容器ID/容器NAME # 停止容器
docker start 容器ID/容器NAME # 启动容器
docker logs 容器ID/容器NAME # 查看容器日志
docker rm 容器ID/容器NAME # 移除容器
docker rmi 镜像ID/镜像NAME # 移除镜像
... 还有 N 多命令...
DockerFile, Images, Containers 关系
编写 Dockerfile, 然后基于 Dockerfile 构建 Images, 然后运行 Images 成为 Containers.
使用 DockerFile 自动构建 Images
编写 Dockerfile 指令:
FROM, RUN, CMD, LABEL, MAINTAINER, EXPOSE, ENV, ADD, COPY, ENTRYPOINT, VOLUME, USER, WORKDIR, ...
参考 Dockerfile reference : https://docs.docker.com/engine/reference/builder/
GitHub Dockerfile : https://github.com/dockerfile
GitHub Dockerfile io : http://dockerfile.github.io/
使用 docker build 构建 Images
docker build [OPTIONS] PATH | URL | -
举例命令:
docker build . # 使用当前目录的 Dockerfile 构建 Images
参考 Docker build reference : https://docs.docker.com/engine/reference/commandline/build/
使用 docker run 运行 Images, 运行后就是 Containers
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
举例命令:
docker run --name redis -d -p 6379:6379 redis # 运行 redis Images, 并且指定暴露端口
参考 Docker run reference : https://docs.docker.com/engine/reference/commandline/run/
加速器
阿里云 加速器: https://cr.console.aliyun.com/#/accelerator
DaoCloud 加速器: https://www.daocloud.io/mirror#accelerator-doc
日志
日志储存位置:
1. 容器内 (默认)
2. 挂载映射到物理磁盘
3. 日志收集平台
日志类型:
1. 标准输出: stdout (正常标准输出), stderr (异常标准输出)
比如 Java 的 System.out.println(""); System.err.println(""); ...
2. 日志文件
比如 Log4j2 的 .log 磁盘文件日志
Docker 日志驱动:
参考: https://docs.docker.com/engine/admin/logging/overview/#supported-logging-drivers
1. none
2. json-file (默认)
3. syslog
4. journald
5. gelf
6. ...
日志:
Docker 守护进程日志
参考:
https://docs.docker.com/engine/admin/#read-the-logs
https://docs.docker.com/engine/admin/logging/view_container_logs/
CentOS:
journalctl -u docker.service
docker service logs
参考: https://docs.docker.com/engine/reference/commandline/service_logs/
Docker 容器日志
docker logs 容器ID/容器NAME (docker logs mysql)
参考: https://docs.docker.com/engine/reference/commandline/logs/
应用日志
建议将日志收集到统一的日志平台, 不建议使用 标准输出
这里有两种方式:
参考: https://docs.docker.com/engine/admin/logging/gelf/
1. dockerd 作用于所有容器, 也就是改变默认配置
dockerd
--log-driver gelf –-log-opt gelf-address=udp://1.2.3.4:12201 \
2. 作用于单个容器
docker run \
--log-driver gelf –-log-opt gelf-address=udp://1.2.3.4:12201 \
alpine echo hello world