前言
学习docker有一周了,学习主要看华为写的《Docker进阶与实践》,还有yeasy 的《Docker 从入门到实践》,期间还参考了不少官网的内容,对于,docker现在应该算是入门了,起码基本的使用现在是没什么问题了。从上一年开始关注docker,到今天入门了,终于填好了一个坑,特别写篇笔记,记录自己学docker的心得。
命令
从yeasy的书里,搞了一张图出来,这张图,可以算得上docker的cheatsheet了。
其实docker的命令也没啥好说的,也就十几个,常用常熟,也不需要特别记忆了。
搭建私人docker registry
用docker官方的registry来搭建自己的镜像服务器是最省事的了
1 | //latest 那个tag在使用的时候会打印api过期,直接用v2的版本吧 |
看到返回了200,说明镜像正常工作
1 | HTTP/1.1 200 OK |
接下来就是尝试使用自己搭建的镜像了!
1 | //注意namesapce 要用你的镜像ip |
然后你会发现push失败了
he push refers to a repository [192.168.99.100:5000/local_busybox]
unable to ping registry endpoint https://192.168.99.100:5000/v0/
v2 ping attempt failed with error: Get https://192.168.99.100:5000/v2/: tls: oversized record received with length 20527
v1 ping attempt failed with error: Get https://192.168.99.100:5000/v1/_ping: tls: oversized record received with length 20527
发生这个的原因,是docker默认是用https,配ssl是一个麻烦的事情,如果你是打算像我这样本地用来测试的,可以让docker使用http来push,但是,如果是公网的,无论多麻烦都不要省这个事情!
1 | docker-machine ssh default |
当你把镜像重新运行起来就可以正常使用
1
docker push 192.168.99.100:5000/local_busybox
这次就不会报错了!
参考资料
完整的docker实践
index.js
1
2
3
4
5
6
7
8 var http = require('http')
var PORT=10000;
var server = http.createServer(function (request, response){
response.end("Hello World! " + request.url)
})
server.listen(PORT, function(){
console.log("Server listening on: http://localhost:%s", PORT);
})
Dockerfile
1
2
3
4 FROM node:4.3.1
ADD . /code
WORKDIR /code
CMD node index.js
接下来使用
1 | docker build -t firstnode . |
Docker Compose
我们一个项目通常会用到多个不同的应用,例如连接数据库,根据docker的官方的建议,一个容器最好只运行一个进程的原则,所以,单单一个dockerfile是满足不了这个需求的,于是官方推出了docker-compose 用于构建多容器。
对于如何安装docker-compose 请参考官网教程 https://docs.docker.com/compose/
使用也是很简单只要在项目目录上创建一个docker-compose.yml
的文件即可
1 | version: '1' |
然后运行1
docker-compose up
ARM 上的docker
常见问题合集
-v 映射的目录必须是绝对路径
例如,你当前路径有一个叫做registry,想这样映射目录是不起作用 的!
docker run -p 5000:5000 -v registry:/var/lib/registry -d –name local_registry registry:2.3.0