一、概要
本文主要介绍docker安装,基本使用,registry私有仓库。
二、docker介绍
解释:
Image
相当于镜像文件、类、模板Container
相当于类的具体实例,可以根据Image生成多个Container,每个Container里有各自不同的配置Dockerfile
可以根据Dockerfile里面的描述生成image文件Docker registry
Docker官方仓库,支持从仓库里获取(pull)公共的image,推送(push)自己镜像到仓库(国内貌似推送不了,所以要用私有registry)Docker
轻量级的虚拟容器,跟虚拟机相比,不仅运行速度更快,而且支持版本控制(依赖git),可以快速tag和从某一tag恢复,升级维护方便
如果是部署在阿里云ECS的则可以利用阿里云的Docker Registry
获取(pull)Docker的常用image(据说是跟官网同步的),但是该Registry是不支持push的,要push需要自己另外建立私有Registry。
二、docker安装
参考 https://docs.docker.com/linux/started/
docker安装支持window、mac、linux等操作系统,如果是window用户建议在window环境下安装一个ubuntu虚拟机,在虚拟机再安装docker,这样会有更好的体验。
下面是在ubuntu14.04 server下的安装步骤(低版本的ubuntu可能需要先升级)
- 安装wget(一般系统都有的了)
$ sudo apt-get update
$ sudo apt-get install wget
- 安装docker
$ wget -qO- https://get.docker.com/ | sh
- 检查是否安装成功(一般情况下所有命令需要sudo)
$ sudo docker version
如果出现版本信息即可
三、docker常用命令
docker服务start/stop/restart
$ sudo service docker start/stop/restart
列出本地所有images
$ sudo docker images
将某个公共的image某个版本(tag)下载到本地(可在https://hub.docker.com/ 查询),不指定tag默认是最新版本即tag为latest
$ sudo docker pull image_name[:tag]
将本地某个image某个版本(tag)上传到官网Registry或私有Registry,不指定tag默认是所有版本
$ sudo docker push image_name[:tag]
生成一个新tag的image
$ sudo docker tag image[:tag] new_image[:tag]
删除images
$ sudo docker rmi image_name/image_id
查询官网images
$ sudo docker search key
查看image提交历史
$ sudo docker history image_name/image_id
查看帮助
$ sudo docker [command] --help
查看Container
$ sudo docker ps
正在运行
$ sudo docker ps -a
所有容器,包括已停止
$ sudo docker ps -l
最近运行的容器Container常用操作(可以用container_id的缩写进行操作)
$ sudo docker start/stop/kill/rm container_name/container_id
$ sudo docker attach container_name/container_id
重新进入到容器中
$ sudo docker start/stop/kill/rm $(sudo docker ps -a -q)
start/stop/kill/rm所有容器
注意,rm之前先要kill或者stop,因此rm不会删掉正在运行的容器启动新Container(运行后会产生一个新的Container)
$ sudo docker run -it image_name/image_id
以交互方式进入容器,进入容器后输入exit则退出容器,并停止容器,如不停止退出则输入ctrl+p ctrl+q
$ sudo docker run -d image_name/image_id
以后台方式运行
$ sudo docker run -v /temp:/home/temp image_name/image_id
将本机/temp挂载到容器的/home/temp目录,容器对/home/temp的所有读写都会反映到本机/temp目录下
$ sudo docker run -p 5001:5000 image_name/image_id
将本机的5001端口映射到容器的5000端口由Container生成image
$ sudo docker commit -m comment container_id image_name[:tag]
由DockerFile生成image
$ sudo docker build -t image_name docker_file_path
输入登录信息(push到官方Registry需要)
$ sudo docker login
然后输入用户名、密码、email
三、创建私有Registry
其实搭建私有registry很简单,它也是docker上面的一个镜像registry
$ sudo docker run -p 5000:5000 registry
应用是以5000端口提供服务
下面介绍私有registry的使用:
先将需要push的image改名,image的命令规则如下
[REGISTRYHOST/][USERNAME/]NAME[:TAG]
,其中REGISTRYHOST
为私有Registry地址可以是ip或者域名,如果是官方Registry则可以省略USERNAME
为Registry上面的用户名NAME
为image名字
通过tag命令将目标image改名,如
$ sudo docker tag myimage mydomain:5000/myname/myimage:v1
通过
$ sudo docker images
会看到新的mydomain:5000/myname/myimage:v1
然后提交到私有Registry
$ sudo docker push mydomain:5000/myname/myimage:v1
同样从私有Registry获取image
$ sudo docker pull mydomain:5000/myname/myimage:v1
注意:
如果push遇到类似证书错误,可以修改本机/etc/default/docker如下
DOCKER_OPTS="$DOCKER_OPTS --insecure-registry=mydomain:5000"
其中mydomain:5000
为你私有Registry的域名或地址,然后重启docker服务即可再次push
四、docker重启自动启动Container
$ sudo docker run --restart=always images [command]
其中:
–restart分为三个参数
no
- container不重启(默认)
on-failure
- container退出状态非0时重启
always
- 始终重启
注意:
默认情况run执行完command会自动退出(exit 0),因此使用always时要避免不断重启