docker基本操作
#本机系统:ubuntu 14.04
注:下面$符号表示我在本机上的bash中的命令提示符
目录:
0:为何要用docker
1:安装docker
2:容器与镜像
3:dockerfile
4:docker Hub
0:为何要用docker
面对敏捷开发,我们希望能够在完成了代码编写后能够十分便捷的进行部署,然而不同服务器的硬件条件,软件条件都可能不同,这样又造成了大量的工作内容,通过docker,我们可以通过系统级别的封装,在此系统中完成我们的代码编写以及服务架设,然后暴露某端口来与宿主服务器某端口绑定,这样就能够完成一次编写后几乎不用做修正就能在多个服务器的架设了。
1:安装docker
$ sudo apt-get update
$ sudo apt-get install docker.io
2:容器与镜像(container/image)
可以把镜像认为是一个软件集合,比如说你的镜像是ubuntu的,其中安装了python等等,而我的是centos的,安装了mysql等等,其是一套所有的软件集合。而这套软件集合要运行了起来需要个容器来盛放,所以有种说法是可以理解容器为运行起来的镜像,进入了这个容器就相当于进入了一个虚拟机(比如进入了一个ubuntu虚拟机系统)。此时就和在正常的系统下一样了,比如我们在此下安装mysql,完毕后退出容器,此时可以选择提交我们刚刚安装了mysql的带有python的ubuntu系统作为新的镜像。自然,同一套镜像是可以运行在多个容器中的,就像同一个windows系统可以运行在所有人的电脑上一样。
步骤:
1)运行一个纯净的镜像为ubuntu系统的容器
$sudo docker run -i -t --name=ubuntucontainer ubuntu:14.04 /bin/bash
使用docker run命令来运行容器(没有就新建)
-i:用于打开容器的标准输入(input)
-t:为容器建立命令行终端
以上两个可以写成-it,其调用后面指定的/bin/bash为当前容器提供了交互shell
--name:指定容器的名字(若不写会随机生成一个)
ubuntu:14.04:即是此容器运行的镜像名,14.04为版本号,如果不写会自动使用官网指定的版本,会先在本地找,如果没有会在Docker Hub下载
一般我们在使用镜像时的命名方式为:dockerhub账户名/实际镜像名:Tag名,而官方提供的顶级镜像就是直接的名字,一般都是操作系统等等
2)安装python
上面的命令就已经进入了容器了,并且应该是在root用户下,交互shell的命令提示符格式为:root@容器ID:【ID为随机生成的】,此时假设为:root@097899b4debe:
此时就可以安装python了
root@097899b4debe:apt-get install python3
如此就安装好python3.4.3了
3)提交我们的镜像
可见,对于我们的纯净的ubuntu系统,我们的环境已经多了个python3.4.3了,我们接下来把他保存为新镜像
首先,退出容器:
root@097899b4debe:exit
其次提交新镜像到本地:
$sudo docker commit -m="installed python3.4.3" --author="billiepander" 097899b4debe billiepander/ubuntupython:v1
使用docker commit命令来提交新镜像
-m:备注信息,就像git commit -m一样
--author:可不写
097899b4debe:容器ID
billiepander/ubuntupython:所建新镜像的名字
v1:Tag,一般用来指定版本
4)查看容器与镜像:
查看容器:
$sudo docker ps -a
使用docker ps命令
若不加-a只显示正在运行的容器,加了是显示全部
显示结果包含字段:CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
对于我们这个例子:CONTAINER ID:097899b4debe;Image:ubuntu:14.04; COMMAND:/bin/bash;PORTS:所暴露的端口,此例没有;NAMES:ubuntucontainer
查看镜像:
$sudo docker images
显示包含字段:REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
对于此例:REPOSITORY:billiepander/ubuntupython ; TAG:v1 ; IMAGE ID:镜像ID ;
3:Dockerfile
除了用上面的进入了运行指定镜像的容器后再做操作后再退出容器通过commit命令提交为新镜像的方法,通过Dockerfile我们可以不进入容器就完成以上操作
$vim Dcokerfile
Dcokerfile输入以下内容:
#version:0.1
FROM ubuntu:14.04
MAINTAINER billiepander "billiepander@126.com"
USER root
RUN apt-get update && apt-get install python3
$sudo docker build -t billiepander/ubuntupython:v1 .
使用docker build命令创建镜像
-t:指定镜像命名空间,仓库名以及版本号
“.”:此地用来指定Dockerfile相对当前路径的位置,用相对位置
示例2:在billiepander/ubuntupython:v1镜像基础上安装mysql保存为新镜像,命名为billiepander/ubuntupython:v2
$vim Dcokerfile
#version:0.2
FROM billiepander/ubuntupython:v1
MAINTAINER billiepander "billiepander@126.com"
USER root
RUN apt-get update && apt-get install mysql-server
RUN mkdir /home/pd #新建一个目录
$sudo docker build -t billiepander/ubuntupython:v2 .
4:关于Docker Hub
在此,将使用github作类比,我们都知道github用于代码托管,而docker Hub是用于镜像托管的,也就是所比如上面的我们可以从纯净ubuntu:14.04到billiepander/ubuntupython:v1再到billiepander/ubuntupython:v2都依次上传,也就完成了镜像的版本控制。与git Hub一样,Docker Hub上有很多公开的镜像。
如此我们可以在其网站上查询我们所需要的镜像,或者直接在bash中通过 “$sudo docker search 关键字” 进行查看,比如我搜索了flask,出来就有很多,其中排名第一的是一个名叫p0bailey/docker-flask有30颗心,那么我们可以通过 “$sudo docker pull p0bailey/docker-flask”(类似git clone的效果) 将此镜像下载到本地,下载完成后就就可以使用此镜像来运行容器了,【此时回顾下最开始运行纯净ubuntu系统的docker run命令,若本地没有此镜像就会从docker Hub上下载,而我们可以先用docker pull命令下载下来,这样用docker run运行时就直接使用本地的此镜像了】,如 “$sudo docker run -it --name=flaskcontainer p0bailey/docker-flask /bin/bash”,如此使用此镜像的名为flaskcontainer的容器就运行起来了。【注:此地有个问题是,虽然在本地通过search查到了p0bailey/docker-flask,但是实际并不知道这个镜像已安装了哪些软件,你可以在本地bash中执行:“$sudo docker inspect p0bailey/docker-falsk”来查看其一些底层信息,但是这任然不会告诉你他有哪些软件,此时只有通过docker hub上查到后点击进入镜像通过看作者自己写的描述能够有些作用,比如此镜像的描述是:This image is a boilerplate for any Flask application, pages are served by uwsgi and Nginx.docker run -d p0bailey/docker-flask。Source code: https://github.com/p0bailey/docker-flask】
注册完后,在本机进行登陆:
$ sudo docker login
Username: billiepander
Password:
Email: billiepander@126.com
WARNING: login credentials saved in /home/pd/.dockercfg.
Login Succeeded
$ sudo cat /home/pd/.dockercfg
{
"https://index.docker.io/v1/": {
"auth": "YmlsbGllcGFuZGVyOnB1bmtpc2RlYWQ=",
"email": "billiepander@126.com"
}
}
在本机登陆完成后就能够通过docker push命令上传镜像到docker Hub服务器,创建名为billiepander/ubuntupython的仓库:
$ sudo docker push billiepander/ubuntupython:v2
自动构建:
除了用上面的上传本地镜像到docker Hub,还可以通过在Docker Hub上通过链接到一个包含Dockerfile文件的git Hub或Bit Bucker仓库,这样Docker Hub的服务器就能够自动构建镜像了【会被标记为Automated Build】,在docker Hub主页右上角点击Create下的Create Automated Build后一路选择到对应的git Hub仓库即可。
用这样的方式的好处在于当所连接的Dockerfile更新后服务器端的镜像会自动更新

浙公网安备 33010602011771号