Docker
教程「入门强烈推荐」
全面:菜鸟教程
狂神说 docker https://www.bilibili.com/video/BV1og4y1q7M4
下载
安装
CentOS
CentOS Docker 安装 | 菜鸟教程 (runoob.com)
卸载
1 | 删除安装包: |
安装
Docker 支持以下的 64 位 CentOS 版本:CentOS 7、CentOS 8、更高版本…
使用官方安装脚本自动安装,安装命令如下:
1 | curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun |
启动
1 | service docker start |
概念
镜像
镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
容器
容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的 命名空间。因此容器可以拥有自己的 root
文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。
系统时区
目前几乎所有的 Docker Image 的时区都是 UTC「世界标准时间」
启动容器时指定时区:
1 | -e TZ='Asia/Shanghai' |
镜像加速
参考:https://juejin.im/post/5cd2cf01f265da0374189441
加速器
建议根据运行 Docker 的云平台选择对应的镜像加速服务
镜像加速器 | 镜像加速器地址 |
---|---|
Docker 中国官方镜像 | https://registry.docker-cn.com |
Azure 中国镜像 | https://dockerhub.azk8s.cn |
科大镜像站 | https://docker.mirrors.ustc.edu.cn |
腾讯云 | https://mirror.ccs.tencentyun.com |
网易云 | https://hub-mirror.c.163.com |
七牛云 | https://reg-mirror.qiniu.com |
阿里云 | https:// |
配置
Windows
Mac
1 |
Ubuntu14.04、Debian7Wheezy
对于使用 upstart 的系统而言,编辑 /etc/default/docker 文件,在其中的 DOCKER_OPTS 中配置加速器地址:
1 | DOCKER_OPTS="--registry-mirror=https://registry.docker-cn.com" |
重新启动服务:
1 | $ sudo service docker restart |
Ubuntu16.04+、Debian8+、CentOS7
对于使用 systemd 的系统,请在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件):
1 | { |
之后重新启动服务:
1 | $ sudo systemctl daemon-reload |
检查加速器是否生效
1 | $ docker info |
命令
显示 Docker 的版本信息
1
2% docker -v
Docker version 19.03.5, build 633a0ea列出本地镜像
1
2
3
4
5% docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
dockerpracticesig/docker_practice latest e0739c901de5 4 days ago 46.5MB
spring-boot-demo-docker 1.0.0-SNAPSHOT b4a8a5630e0d 3 weeks ago 121MB
nginx latest 6678c7c2e56c 5 weeks ago 127MB类似的有:
docker image ls
删除镜像
1
2
3docker image rm xxx
//示例
docker image rm rabbitmq:stomp列出正在运行的容器
1
2
3
4% docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
df9418f8e43c dockerpracticesig/docker_practice "nginx -g 'daemon of…" 12 hours ago Up 12 hours 0.0.0.0:4000->80/tcp dreamy_bassi
a3400150814f elasticsearch:6.5.3 "/usr/local/bin/dock…" 2 weeks ago Up 12 hours 0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp elasticsearch-6.5.3docker container ls -a
:包含未启动、已启动、已停止的容器启动
1
2
3
4
5
6
7//新建并启动
docker run xxx
//示例
docker run -t -i ubuntu:18.04 /bin/bash
//启动已终止容器
docker container start xxx「CONTAINER ID」查看容器完整 command 的命令
1
docker ps -a --no-trunc
进入容器 shell
1
docker exec -it containerid /bin/bash
终止容器
1
docker container stop xxx
容器重命名
1
docker rename my_container my_new_container
重启容器
1
docker restart {container_id}
删除容器
1 | //删除一个处于终止状态的容器 |
- 清理所有处于终止状态的容器
1 | docker container prune |
- 获取容器的输出信息「日志」
1 | docker logs -f xxx「container ID」 |
等价于 docker container logs [container ID or NAMES]
宿主机和容器间复制文件
docker cp
1
2
3docker cp df9418f8e43c:/etc/nginx/nginx.conf /Users/mac126/Desktop
docker cp /Users/mac126/Desktop/nginx.conf df9418f8e43c:/etc/nginx/
问题解决
docker pull ubuntu
1
2Using default tag: latest
Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)配置 DNS
vi /etc/resolv.conf
1
2nameserver 114.114.114.114
nameserver 114.114.115.115重启网络
1
service networking restart
修改镜像仓库地址
vim /etc/docker/daemon.json
1
2
3{
"registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]
}
重启守护进程
1
2systemctl daemon-reload
systemctl restart docker
使用
https://www.runoob.com/docker/docker-container-usage.html
docker 服务自动重启设置
1 | systemctl enable docker.service |
docker
重启后容器也自动重启
容器启动时
1
docker run --restart always
已经启动了
1
docker update --restart always <CONTAINER ID>
实例
Portainer
参考《Docker-可视化工具》
YApi
Openjdk
说明
从尺寸上来讲,alpine 最小、slim 稍大、默认的最大。所以应该尽可能的使用 alpine 版本的,如果发现程序的运行环境缺少某些东西,那么尝试用 slim 版本或者默认版本。就目前的经验来讲:
如果需要操作系统字体库,那么就得使用 slim 版本或者默认版本。需要操作系统字体库的程序例如:图片验证码、PDF 导出。
如果需要某些 Linux 标准的动态 / 静态连接库,那么在 alpine 版本不行的情况下,尝试 slim 版本或默认版本。因为 alpine 版本是一个及其精简的 Linux,它删除了很多东西
命令
1 | docker pull openjdk:8-jdk |
SpringBoot「废弃,参考《SpringBoot-Docker部署》」
本 demo 主要演示了如何容器化一个 Spring Boot 项目。通过 Dockerfile
的方式打包成一个 images
Dockerfile
1 | # 基础镜像 |
打包方式
手动打包
前往 Dockerfile 目录,打开命令行执行
1
$ docker build -t spring-boot-demo-docker .
查看生成镜像
1
2
3
4
5$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
spring-boot-demo-docker latest bc29a29ffca0 2 hours ago 119MB
openjdk 8-jdk-alpine 97bc1352afde 5 weeks ago 103MB运行
1
$ docker run -d -p 9090:8080 spring-boot-demo-docker
使用 maven 插件打包
pom.xml 中添加插件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45<artifactId>spring-boot-demo-docker</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>spring-boot-demo-docker</name>
<description>Demo project for Spring Boot</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<dockerfile-version>1.4.9</dockerfile-version>
</properties>
<build>
<finalName>spring-boot-demo-docker</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>${dockerfile-version}</version>
<configuration>
<repository>${project.build.finalName}</repository>
<tag>${project.version}</tag>
<buildArgs>
<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
<executions>
<!--设置运行 mvn package 的时候自动执行docker build-->
<execution>
<id>default</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>执行mvn打包命令,因为插件中
execution
节点配置了 package,所以会在打包的时候自动执行 build 命令1
$ mvn clean package -Dmaven.test.skip=true
查看镜像
1
2
3
4
5$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
spring-boot-demo-docker 1.0.0-SNAPSHOT bc29a29ffca0 2 hours ago 119MB
openjdk 8-jdk-alpine 97bc1352afde 5 weeks ago 103MB运行
1
$ docker run -d -p 9090:8080 spring-boot-demo-docker:1.0.0-SNAPSHOT
参考
- docker 官方文档:https://docs.docker.com/
- Dockerfile 命令,参考文档:https://docs.docker.com/engine/reference/builder/
- maven插件使用,参考地址:https://github.com/spotify/dockerfile-maven
MySQL
参考《MySQL-Docker》
Redis
参考《Redis-Docker》
Nginx
参考《Nginx-Docker》
ElasticSearch
参考《ElasticSearch-Docker》
Tomcat
参考《Tomcat-Docker》
Oracle
参考《Oracle-Docker》
RabbitMQ
参考《Rabbitmq-Docker》
MongoDB
参考《MongoDB》