docker起源于2013年,目前新版的docker需要linux 7版本环境。
docker的三个基础概念:镜像、容器、仓库。
docker安装:
yum install docker #docker安装
systemctl start docker.service #docker启动
docker #docker命令的执行
docker search mysql -s 100 #查看mysql的镜像源,-s指显示STARS大于100的镜像源
镜像获取:
镜像是一个模板,可以从镜像服务器上获取做好的镜像。docker使用docker pull命令来获取镜像。
docker pull mysql #获取一个mysql镜像
docker images #显示本地已有的镜像,有几个字段,分别是来自哪个仓库/镜像,镜像标志,镜像id,创建时间,镜像大小
docker run -t -i 镜像名称 /bin/bash #使用获取的镜像,创建一个容器,在容器中运行bash应用,-t指运行之后产生一个命令行(terminal),-i让容器的标准输入保持打开
docker ps #ps查看运行的容器有哪些
创建镜像:
创建镜像有很多种方法,用户可以更新镜像,也可以利用本地文件系统创建镜像。
a、docker pull training/sinatra #先下载镜像
b、docker run -t -i training/sinatra /bin/bash #启动镜像
c、gem install json #在镜像中添加gem和json应用
d、exit #使用exit退出容器
e、docker commit -m 'add gem json' -a 'Docker Container' 7b789b19572d my/sinatra:v2 #利用docker commit命令来提交更新后的副本,-m参数指定提交的说明描叙信息,-a参数指定维护的用户信息,后面是用来指定镜像的容器ID(d之前的容器ID),最后面是创建镜像的仓库名和tag信息。创建成功后,命令会返回这个镜像的ID信息。
f、docker images #查看刚才创建的镜像
g、docker run -t -i my/sinatra:v2 /bin/bash #使用自己创建的镜像来启动容器
方法二:使用Dockerfile创建镜像
使用Dockerfile来创建镜像,使用docker commit虽然很容易扩展镜像,但不便于团队分享,我们可以使用docker build 来创建一个新的镜像。为此首先要创建一个Dockerfile文件,这个文件中包含如何创建镜像的指令。
a、首先创建一个目录和Dockerfile
mkdir sinatra&&cd sinatra&&touch Dockerfile
b、Dockerfile中输入指令,每条指令都创建镜像的一层
cat >>Dockerfile <<eof
---------------------------------------------
#注解
FROM centos
MAINTAINER REGAN 11658999869@qq.com
RUN yum -qqy install python
---------------------------------------------
<<eof #其中from告诉docker使用哪个镜像作为基础,接着是维护者的信息,run开头的指令会在创建中运行,例如安装一些软件包,这里使用yum安装python,需要定制参数-qqy,否则可能报错。
docker build -t='/my/python:v1'. #其中-t标记来添加tag,指定新的用户的信息。“.“是Dockerfile所在的路径(当前目录),也可以替换为一个具体的Dockerfile的路径。可以看到build进程在执行操作。它要做的第一件事情就是上传这个Dockerfile内容,因为所有的操作都要依据Dockerfile来进行。然后,Dockerfile中的指令被一条一条的执行。每一步都创建一个新的容器,在容器中执行指令并提交修改(就跟之前的docker commit一样)。当所有的指定都执行完毕之后,返回了最终的镜像id。所有的中间步骤所产生的容器都被删除和清理了。需要注意的是,一个镜像是不能操作127层,否则会报错。
当然Dockerfile中还可以输入其他的命令,例如可以使用ADD命令复制本地文件到镜像中;用EXPOSE命令对外开放端口;使用CMD命令描述容器启动后运行的程序。
docker images命令查看容器的标签信息,如果觉得不好看,可以使用docker tag命令来更改标签的名字。
本地导入镜像:
使用docker import命令进行导入
例如下载了一个rarlinux-x64-5.3.0.tar.gz镜像文件,使用下列命令导入
cat rarlinux-x64-5.3.0.tar.gz|docker import - rarlinux:5.3
可以看到导入完成后,docker为我们生成了一个镜像的ID,使用docker images也可以看到我们刚才导入的镜像。注意镜像文件必须是tar.gz类型的文件。
上传镜像:用户可以通过docker push命令,把自己创建的镜像上传到仓库中共享。
docker push rarlinux #注意,上传到公有库时,需要注意上传的镜像名称,前面要加上github的注册账户名/软件仓库名。
镜像的保存、载入、删除
使用docker save命令,保存镜像到本地
docker save -o rarlinux.tar.gz rarlinux
使用docker load命令,将本地保存的镜像再次载入到docker中。
docker load --input rarlinux.tar.gz
或者 docker load <rarlinux.tar.gz
docker镜像过时了,需要删除,使用docker rmi image_id
docker容器的创建、启动和停止
容器是独立运行的一个或一组应用,及他们的运行环境。容器是docker的一个重要概念。
docker容器的启动有2种方式,
a、基于镜像新建容器并启动
例如我们可以启动一个容器,打印出当前的日历表
docker run centos cal
我们还可以通过指定参数,启动一个bash交互终端。
docker run -t -i centos /bin/bash
b、将在终止状态的容器重新启动
可以使用docker start命令,直接将一个已经终止的容器启动运行起来。
docker start mysql
docker stop containerID
2、守护态运行
很多时候,我们希望容器在后台以守护态运行,此时可以添加-d参数来实现(daemon)例如我们启动centos后台容器,每隔一秒打印当天的日历。
docker run -d centos /bin/bash -c "while true;do echo hello docker;sleep 1;done"
启动之后,我们使用docker ps查看容器的信息
要查看启动的centos容器的输出,可以使用docker logs containerID
3、终止容器
使用docker stop来终止一个运行中的容器。并且可以使用docker ps -a来看终止状态的容器
docker stop containerID #终止一个正在运行的容器
使用docker run命令来启动容器,docker在后台运行的标准操作包括
1、检查本地是否存在指定的镜像,不存在则从公有仓库下载
2、使用镜像创建并启动容器
3、分配一个文件系统,并在只读的镜像层外面挂载一层可读可写层
4、从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
5、从地址池分配一个ip地址给容器
6、执行用户指定的应用程序
7、执行完毕之后容器被终止