前言
网上安装教程很多,ubuntu下的docker安装较为简单,具体的docker的安装教程网上搜索即可。
一、启动docker服务
首先测试docker是否已经启动,测试命令采用查看版本信息命令
docker --version
使用结果出现如下图所示:
提示:Cannot connect to Docker daemon. Is the docker daemon runing on this host,说明docker 服务未启动,需要启动docker服务
su root #切换到root用户
systemctl enable docker #设置开机自动启用docker服务
systemctl start docker #启动docker 服务
或者
service docker start #启动docker 服务
或者
start docker
2、关闭docker服务
关闭docker服务
service docker stop
或者
systemctl stop docker
Docker的镜像称为image,容器称为container。
对于Docker来说,image是静态的,类似于操作系统快照,而container则是动态的,是image的运行实例。
比如,有一个image名称为ubuntu,那么比如现在我们启动这个image的container并且进入到这个container的bash命令行中:
docker run -t -i ubuntu /bin/bash
docker run -it --name test ubuntu /bin/bash
其中的各个命令的结束如下所示:
- docker run:启动container
- ubuntu:你想要启动的image
- -t:进入终端
- -i:获得一个交互式的连接,通过获取container的输入
- /bin/bash:在container中启动一个bash shell
–name 表示命名容器
这样就进入container的内部了:
如果有运行中的container,可以在container所在的外部操作系统中运行:
docker ps
查看历史信息所运行的容器(container)包括运行中的,以及未运行的或者说是沉睡镜像。
docker ps -a
如果要退出就:
Ctrl-D
或:
root@af8bae53bdd3:/# exit
如果想再次打开这个container,运行:
docker start goofy_almeida
其中“goofy_almeida”是容器的名称。
3、进入container(容器)
使用“docker attach”命令进入
这个时候container运行在后台,如果想进入它的终端,则:
docker attach goofy_almeida
就可以了。
使用“docker exec -it”命令进入
使用“docker attach”命令进入container(容器)有一个缺点,那就是每次从container中退出到前台时,container也跟着退出了。
要想退出container时,让container仍然在后台运行着,可以使用“docker exec -it”命令。每次使用这个命令进入container,当退出container后,container仍然在后台运行,命令使用方法如下:
docker exec -it goofy_almeida /bin/bash
- goofy_almeida:要启动的container的名称
- /bin/bash:在container中启动一个bash shell
这样输入“exit”或者按键“Ctrl + C”退出container时,这个container仍然在后台运行,通过:
docker ps
就可以查找到。
退出container
输入:
exit
或者按键:
Ctrl + D
4、编写Dockerfile
- Dockerfile中的每个指令执行完毕之后,都会提交为一个新的image,这样保证了指令之间不会相互影响
- Dockerfile会尽可能的尝试重用之前已经构建的镜像
- 可以通过在build命令中增加-no-cache的方式来金庸cache
docker需要注意的地方:
- 只支持docker自己定义的一套指令,不支持自定义
- 大小写不敏感,但是建议全部使用大写 根据dockerfile的内容顺序执行
docker指令:
FROM{基础镜像}
必须放在Dockfile的第一行,表示从哪个Baseimage开始构建。
RUN
- 每一个RUN指令都会在一个新的container里边运行,并提交为一个image(镜像)作为下一个RUN的base
- 一个Dockerfile中可以包含多个Run,按照定义顺序执行。 RUN支持两种运行方法
- RUN这个会当作/bin/sh -c ”cmd“运行
- RUN[”executable“,”arg1“,…],Docker会当成json的序列来解析,因此,必须使用双引号,而且executable需要是完整的路径
CMD
- CMD的作用是作为知悉ingContainer时候的默认行为
- 当运行Container的时候生命力Command,则不再使用image中的CMD所定义的命令
一个Dockerfile中只能有一个有效的CMD,当定义多个CMD的时候,只能有最后一个才会起作用。
CMD定义的三种方式
- CMD这个会当作/bin/sh -c ”cmd“来执行
- CMD[“executable”,“arg1”,“arg2”]
- CMD[“arg1”,“arg2”],这个时候CMD作为ENRYPOINT的参数
ENTRYPOINT
-
ENTRYPOINT的作用是把整个Container变成了一个可执行的文件,这样不能够通过替代CMD的方法来改变创建Container的方式,但是可以通过参数传递的方式,影响到Container的内部。
-
每个Dockerfile只能够包含一个ENTRYPOINT,多个ENTRYPOINT只能最后一个能有效
-
当定义了ENTRYPOINT以后,CMD只能够作为参数进行传递。
ADD©
- 当再源代码构建的方式下,可以通过ADD和COPY的方式,把Host上的文件或者目录复制到image
- ADD©的源必须再context路径下
- 当src为网络URL的情况下,ADD只能可以把它下载到Dest的指定位置,这个再任何build情况的方式下都可以Work
ENV
ENV key value
- 用来设置环境变量,后续的RUN可以使用它所创建的环境变量
- 当创建基于该镜像的Container的时候,会自动拥有设置的环境变量
ONBUILD
-
ONBUILD作为一个trigger的标记,可以用来trigger任何Dockerfile中的指令 可以定义多个ONBULILD指令
-
当下一个镜像B使用镜像A作为Base的时候,再FEOM A指令前,会先按照顺序执行再构建A时候定义的ONBUILD指令
-
ONBUILD<DOCKERFILE指令><Content>
VOLUME
用来创建一个再image之外的mount point 用来再多个Container之间实现数据共享,
运行使用Json array的方式定义多个Volume VOLUNE["/val/data1","/val/data2"]
或则plain text的情况下定义多个VOLUME指令。
5、创建镜像
首先需要创建一个Dockerfile文件
执行构建命令: docker build -t second:v1.0 .
注意最后有个点,代表使用当前路径的 Dockerfile 进行构建 ,
-t second : v1.0 给新构建的镜像取名为 second, 并设定版本为 v1.0 。
docker build: 用 Dockerfile 构建镜像的命令关键词。
[OPTIONS] : 命令选项,常用的指令包括 -t 指定镜像的名字,
-f 显示指定构建镜像的 Dockerfile 文件(Dockerfile 可不在当前路径下),
如果不使用 -f,则默认将上下文路径下的名为 Dockerfile 的文件认为是构建镜像的 “Dockerfile” 。
上下文路径|URL: 指定构建镜像的上下文的路径,构建镜像的过程中,可以且只可以引用上下文中的任何文件 。
可以用docker images 查看是否构建成功。