Docker快速上手指南
写作目的:
本人在学习 Docker 时也是看了官方Docs和极客学院的教程,以及各种博客,可能本人愚钝并未看太懂,后来上手操作后理解 Docker 。
所以这是一篇 个人认为 更快速让大家能够 使用 以及 理解 Docker 的指南。
所以
如果还不知道Docker是什么,那赶快去google一下吧。
如果不知道Docker能做什么,那继续往下看。
以下是正文
此指南新手操作下来,大概需要20分钟左右
老鸟5分钟不到就完事
目录
- Docker 安装
- Docker 镜像创建
- Docker 容器初探
- 制作镜像
- 上传镜像
- Dockerfile
Docker 安装
Docker 镜像创建
本段会有一些Docker术语,不明白没关系,往下看,看完上手操作一遍就理解了
我将会运行一个Nodejs程序,不了解Nodejs程序也没关系,Nodejs换成java或者php
-
首先我们下载一个ubuntu镜像.
为什么要用ubuntu镜像?
答: 因为所有镜像都是基于linux kernel(如果有误请指正),而ubuntu比较流行,所以这里采用ubuntu镜像。
docker pull ubuntu:16.04
(部分童鞋可能得加 sudo docker pull ubuntu:16.04 )
(用过git的童鞋应该比较熟悉,其实Docker命令和git差不多)其中,
:16.04
是ubuntu系统版本号,换成:14.04
也是可以的git有git仓库,那么,Docker也是有Docker仓库的。默认Docker仓库地址为:https://store.docker.com/ 所有的镜像都是从这里拉取的
-
运行一个镜像
docker run -i -t -p 3000:3000 ubuntu:16.04 /bin/bash
- -i 显示info级别log信息
- -t 显示控制台
- -p 3000:3000 把容器(下面有解释)的3000端口映射到本机3000端口
对于linux熟悉的童鞋看到这里应该很熟悉,这不就是linux的目录结构吗?
Docker 容器初探
查看刚才运行的镜像,即,查看容器
docker ps -a
这里对于Docker的相关名词(Docker,镜像,容器)做一些解释,因为后续会频繁用到这些名词
具体官方解释请google或者查看官网解释,这里做个类比大家应该就理解了。
- Docker可以认为是vmware或者virtualbox
- 镜像可以认为是 xxx.iso
- 容器可以认为是 virtualbox运行xxx.iso后的系统
如上图,有两个容器,从STATUS可知,第一个容器已经退出,第二个容器正在运行。
现在我们进入第一个容器。
docker start ae9b89d01cac
docker attach ae9b89d01cac
既然前面说了,容器可以认为是虚拟机运行后的系统,那么咱们运行的是ubuntu,那么咱们就
apt-get update
试一下完全没问题。
眼尖的童鞋应该发现了,apt-get update
没有加sudo,这是因为容器内默认root权限(其实是伪root权限)
那么想要在这个容器内运行NodeJS服务,就需要安装NodeJS环境,以及安装git把代码pull下来,当然Java和PHP童鞋可以安装java和php环境。
- 下载git:
apt-get install git
- 下载curl:
apt-get install curl
- 安装Node:
curl -sL https://deb.nodesource.com/setup_4.x | bash -
- 下载源码:
git pull https://git.oschina.net/ryzecode/Docker_Nodejs_Test.git
- 运行程序
node bin/www
此时浏览器运行http://127.0.0.1:3000
应该就可以访问运行的node项目了
制作镜像
那么,我们怎么在其他地方使用刚才的容器呢?
同理为,virtualbox运行了xxx.iso,然后我们修改了一些内容,那么,我们怎么把修改后的系统给别人用呢?
那就是把修改后的系统再打为iso就可以了。即,把容器再打为镜像即可。
做法如下:
- 退出容器
- 查看容器
docker ps -a
- 把容器打成镜像
sudo docker commit a6c28e3f1ec4 ryzebo/docker-nodejs-test:0.1
- a6c28e3f1ec4 是容器的id
- ryzebo 是你注册的https://store.docker.com/的名字,如果你没有的话,那需要先注册
- docker-nodejs-test 是你为该镜像起的名字
- :0.1 是镜像的版本号,默认是latest版本
- 查看镜像
docker images
上传镜像
那么镜像想要被别人使用,就要上传到镜像管理平台,即https://store.docker.com/,就像代码要放到github一样
下面是上传步骤:
- 登录
docker login
- 上传
docker push ryzebo/docker-nodejs-test:0.1
此时在https://store.docker.com/搜索ryzebo/docker-nodejs-test(搜索你自己的哦),就会看到你刚刚上传的镜像了
再次使用该镜像就可以直接docker pull ryzebo/docker-nodejs-test:0.1
来使用了
如果初始镜像不用ubuntu而用node镜像的话,那么就不需要在容器内进行下载git,下载curl,安装node了。
怎么样?是不是很简单?
这时候是不是有疑问,Docker这不也挺麻烦的吗?
恩,这样用确实麻烦,不过,以上内容只是为了让大家理解Docker。真实生产环境将会使用Dockerfile。
Dockerfile
Dockerfile类似于makefile。这样说大家是不是就理解了。
使用如下:
- 编写Dockerfile文件
FROM node
# 基于node镜像 ,如果基于刚才的镜像则 FROM ryzebo/docker-nodejs-test:0.1
MAINTAINER Ryze <hz.bgning@gmail.com>
# 作者信息
RUN git clone https://git.oschina.net/ryzecode/Docker_Nodejs_Test.git \
&& cd ./Docker_Nodejs_Test \
&& npm install .
# RUN 命令的内容大家应该看得懂
WORKDIR ./Docker_Nodejs_Test
# 设定初始目录
EXPOSE 3000
# 暴露3000端口
CMD ["node","bin/www"]
# 运行 node bin/www命令
注意,文件名就叫Dockerfile,内容就是以上内容,放到一个空文件夹中
然后build该Dockerfile为一个镜像
docker build --rm --no-cache=true -t docker-node-test .
- -t 设定镜像名字 docker-node-test
- --rm 如果已存在docker-node-test镜像,则删除docker-node-test镜像
- --no-cache=true build时,禁止缓存
查看镜像docker images
运行该镜像docker run -p 3000:3000 -d docker-node-test
此时访问http://127.0.0.1:3000/
即可
本指南讲解了部分Docker指令和部分Dockerfile指令
- Docker其它指令可以去官网查看,也可以看我另一篇文章《Docker常用命令》,里面总结出一些Docker常用指令
- Dockerfile其它指令可以在官网查看https://docs.docker.com/engine/reference/builder/
- 也可以看我实际应用Docker文章一步一步打造jenkins+docker+nodejs项目的自动部署环境 , 加深对Docker的理解
指南结束!
另:
有不理解的地方,可以邮件我:hz.bgning@gmail.com