See also CentOS、Kubernetes |
Docker
Contents
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架包括系统。
1. 简介
1.1. 起源
Docker 是 PaaS 提供商 dotCloud 开源的一个基于 LXC 的高级容器引擎,源代码托管在Github上, 基于go语言并遵从Apache2.0协议开源。
2013年10月,dotCloud 改名 Docker, Inc,妄图在商业上完全控制 Docker。
一款开源软件能否一炮打响,很大程度上依赖三件事:成功的 Usecase, 活跃的社区和一个好故事。但为了商业价值而想独占技术的野心却不断遭人诟病,最后落得偷鸡不成蚀把米。
1.2. moby、docker-ce与docker-ee的区别
最早的 docker 是一个开源项目,主要由 dotCloud(后改名为 Docker, Inc)公司维护;
2017年年初,docker公司将原先的 docker 项目改名为 moby,并创建了 docker-ce 和 docker-ee。
这三者的关系如下
moby 继承了原先的 docker 项目,是社区维护的的开源项目,谁都可以在 moby 的基础打造自己的容器产品
docker-ce 是docker公司维护的开源项目,是一个基于 moby项目的免费的容器产品
docker-ee 是docker公司维护的闭源产品,是docker公司的商业产品。
v1.13.1之后,docker-ce 的发布计划更改为:
- Edge: 月版本,每月发布一次,命名格式为YY.MM,维护到下个月的版本发布
- Stable: 季度版本,每季度发布一次,命名格式为YY.MM,维护4个月
- docker-ce的release计划跟随moby的release计划
2. 相关内容索引
3. Getting Started
3.1. Learning
https://docker-curriculum.com A Docker Tutorial for Beginners
http://hokstad.com/docker/patterns Eight Docker Development Patterns
https://github.com/FuriKuri/docker-best-practices Docker Best Practices
https://docs.docker.com/develop/develop-images/dockerfile_best-practices/ Best practices for writing Dockerfiles
http://docs.projectatomic.io/container-best-practices/ Container Best Practices
https://logz.io/learn/docker-monitoring-elk-stack/ Docker Monitoring with the ELK Stack: A Step-by-Step Guide
4. Docker Command Line
4.1. shell completion
https://docs.docker.com/docker-for-mac/
etc=/Applications/Docker.app/Contents/Resources/etc
ln -s $etc/docker.zsh-completion /usr/local/share/zsh/site-functions/_docker
ln -s $etc/docker-machine.zsh-completion /usr/local/share/zsh/site-functions/_docker-machine
ln -s $etc/docker-compose.zsh-completion /usr/local/share/zsh/site-functions/_docker-compose
5. Services
5.1. Registry Mirrors in China
http://get.daocloud.io/: DaoCloud 提供的Docker的安装包以及周边高速镜像
http://cadcca32.m.daocloud.io Registry Mirror
{
"registry-mirrors": [
"http://cadcca32.m.daocloud.io",
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"https://dockerhub.azk8s.cn",
"https://docker.mirrors.ustc.edu.cn"
"https://reg-mirror.qiniu.com"
]
}
5.2. Java
https://hub.docker.com/_/openjdk Versions:
(8)Dockerfile 8-jdk or 8
(8-jre)Dockerfile 8-jre
openjdk:<version>-alpine Alpine Linux(~5MB) 一个非常非常小的 Linux 发行版
➜ ~ docker pull openjdk:<version>
➜ ~ docker images |grep 'openjdk\|java'
openjdk 8-jre-slim 525155b9ab5e 40 hours ago 161MB
openjdk 8-jre d074f374c689 40 hours ago 245MB
openjdk 8-jre-alpine f7a292bbb70c 2 weeks ago 84.9MB
openjdk 8 b8d3f94869bb 8 weeks ago 625MB
openjdk 8-jdk b8d3f94869bb 8 weeks ago 625MB
openjdk 8-jdk-alpine 04060a9dfc39 5 months ago 103MB
java 8-jre e44d62cf8862 2 years ago 311MB
5.3. MySQL
https://docs.docker.com/samples/library/mysql/
➜ es-startup git:(master) docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:5.6
5.4. Elasticsearch
https://docs.docker.com/samples/library/elasticsearch/
➜ es-startup git:(master) docker pull elasticsearch:2.4
2.4: Pulling from library/elasticsearch
...
Digest: sha256:41ed3a1a16b63de740767944d5405843db00e55058626c22838f23b413aa4a39
Status: Downloaded newer image for elasticsearch:2.4
# 使用外部配置和数据
➜ ~ docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -v /tmp/elasticsearch_data:/usr/share/elasticsearch/data -v /tmp/es.yml:/usr/share/elasticsearch/config/elasticsearch.yml elasticsearch:2.4
5.5. Neo4j
https://docs.docker.com/samples/library/neo4j/
➜ es-startup git:(master) docker run \
--publish=7474:7474 --publish=7687:7687 \
--volume=/tmp/neo4j/data:/data \
neo4j
5.6. Spring Boot Development with Docker
https://blog.docker.com/2017/05/spring-boot-development-docker/
➜ ~ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
...
# retag base images
➜ ~ docker pull java:8-jre
➜ ~ docker tag java:8-jre 10.10.150.149:5000/java:8-jre
➜ ~ docker pull nginx
➜ ~ docker tag nginx 10.10.150.149:5000/nginx
# Dockerfile for Vue.js with Nginx
FROM 10.10.150.149:5000/nginx
ADD dist /var/www
RUN chmod -R 755 /var/www
RUN chown -R $USER:$USER /var/www
ADD conf/nginx.conf /etc/nginx/conf.d/myhost.conf
server {
listen 80 default_server;
location / {
root /var/www;
index index.html;
try_files $uri $uri/ /index.html;
}
location /api/ {
proxy_pass http://localhost:8080/;
proxy_set_header X-Real-IP $remote_addr;
client_max_body_size 1000m;
}
}
docker run -d --name www -p 8080:80 my-web
docker exec -it www bash
5.7. Nginx/Jre Application