docker使用教程
docker使用教程
安装在之前已经说过了,下面是怎么基本操作的。
1.查看容器运行
docker ps
2.查看当前容器的标准输出
docker logs (容器id或者容器名称name)
3.停止容器
docker stop (容器id或者name)
4.运行容器
docker run
参数:
-t:在新容器内指定一个伪终端或终端
-i:允许你对容器内的标准输入进行交互 如:docker run -i -t ubuntu:15.10 /bin/bash
-d:让容器在后台运行
-P:端口映射
-p:制定端口 -p 5000:5000
5.列出本地镜像
docker images
6.删除本地镜像
强制删除:docker rmi -f (镜像id)
如果一个名字存在多个标签,可使用名字加标签进行删除docker rmi name:tag name:tag1.....
7.删除日志记录
docker rm $(docker ps -a -q)删除全部
docker rm (镜像id)
8.下载镜像
docker pull (镜像名称)
9.查找镜像源
docker search (需要查找的名称)
会自动从Docker Hub网站搜索镜像,网址为:https://hub.docker.com/
10.更新镜像
先使用镜像创建一个容器:docker run -i -t ubuntu:15.10 /bin/bash
在容器内执行apt-get update
命令进行更新,然后exit
退出
使用docker commit提交,记住这个容器的iddocker commit -m="has update" -a="name1" 12345678 aaaa/bbbb:v1
参数说明:
-m:提交的描述信息
-a:指定镜像作者
12345678:容器id
aaaa/bbbb:v1:制定要创建的目标镜像名
可以使用docker images查看新的镜像aaaa/bbbb:v1
11.构建镜像
使用docker build命令创建一个新的镜像,在此之前我们需要创建一个Dockerfile文件,基于这个文件来创建什么样的镜像。
先创建一个文件夹用于存放我们的Dockerfile文件cd /opt/static_file/
sudo vim Dockerfile
输入以下内容:
FROM ubuntu:latest
MAINTAINER Bourbon Tian “[email protected]”
RUN apt-get update
RUN apt-get install -y nginx
RUN echo ‘Hi, I am in your container’ > /usr/share/nginx/html/index.html
EXPOSE 80
Dockerfile是由一系列的指令和参数组成,每条指令都必须大写。Dockerfile中的指令会按照从上往下的顺序依次执行。大致流程如下:
- docker从基础镜像上运行一个容器
- 执行第一条指令,对容器进行修改
- docker再给予刚提交的镜像运行一个新的容器
- 继续执行Dockerfile中的下一条指令,直到所有的指令都执行完毕
FROM:
每个Dockerfile的第一个指令都要是FROM,这个表示的是指定一个已经存在的镜像,在这个镜像的基础智商执行后续命令。
MAINTAINER:
这个指令会告诉docker该镜像的作者是谁,邮箱地址
ENV
设置环境变量
设置docker内编码ENV LANG C.UTF-8
RUN:
这条指令代表在该镜像中运行指定的命令
EXPOSE:
EXPOSE指令是告诉docker该容器内的应用程序将会使用的容器端口号,可以有多个EXPOSE指令。docker不会自动打开这个端口号,需要在docker run时指定打开哪个端口
执行docker build命令时,Dockerfile中的所有指令都会被提交,成功后返回新的镜像id。类似“Successfully built 94728651ce15”
docker build -t (镜像名称) .)
参数解释:
-t:指定要创建的目标镜像名
.:Dockerfile文件的所在目录,这里是当前目录,也可以指定Dockerfile的绝对路径
注意:可以使用–no-cache在docker build是指定不适用缓存
使用docker images命令查看新构建的镜像,使用docker history (镜像id)查看镜像的每一层,以及创建这些层的Dockerfile指令。
12.Dockerfile中的CMD、RUN、ENTRYPOINT
简单说:
1.RUN 执行命令并创建新的镜像层,RUN 经常用于安装软件包。
2.CMD 设置容器启动后默认执行的命令及其参数,但 CMD 能够被 docker run
后面跟的命令行参数替换。
3.ENTRYPOINT 配置容器启动时运行的命令。
执行这三个命令是可以使用两种格式Shell和Exec。
Shell和Exec格式
shell格式:
例如:
RUN apt-get install python3
CMD echo “Hello world”
ENTRYPOINT echo “Hello world”
当指令执行时,shell格式底层会调用/bin/sh -c 。
例如:
ENV name HelloWorld
ENTRYPOINT echo “name”]
执行docker run 后输出:
$name
此时的环境变量name没有被解析替换。
如果想要使用环境变量,可以修改为:
ENTRYPOINT ["/bin/sh","-c",“echo $name”]
注意:RUN命令两种格式都可以使用,CMD和ENTRYPOINT推荐使用Exec格式
RUN
RUN指令一般用于安装应用和软件包,在Dockerfile文件的顶部
举例安装多个包:
RUN apt update && apt-get install -y
cvs
git
python3-pip
注意:apt update和apt install一般要放在同一条RUN指令中,这样可以保证每次安装的包都是最新的!
CMD
CMD命令是创建容器之后,运行的时候才会执行的命令,可以被docker run 指定的命令覆盖,如果Dockerfile中存在多个CMD指令,只有最后一个有效。
CMD 有三种格式:
1.Exec 格式:CMD [“executable”,“param1”,“param2”]
这是 CMD 的推荐格式。
2.CMD [“param1”,“param2”] 为 ENTRYPOINT 提供额外的参数,此时 ENTRYPOINT 必须使用 Exec 格式。
3.Shell 格式:CMD command param1 param2
举例:
Dockerfile文件片段:
CMD echo “Hello world”
运行容器 docker run -it [image]输出:
Hello world
如果运行时加上指定命令,docker run -it [image] /bin/bash,CMD会被忽略,输出:
[email protected]:/#
ENTRYPOINT
ENTRYPOINT 指令可让容器以应用程序或者服务的形式运行。
ENTRYPOINT 看上去与 CMD 很像,它们都可以指定要执行的命令及其参数。不同的地方在于 ENTRYPOINT 不会被忽略,一定会被执行,即使运行docker run 时指定了其他命令。
ENTRYPOINT 有两种格式:
1.Exec 格式:ENTRYPOINT [“executable”, “param1”, “param2”] 这是 ENTRYPOINT 的推荐格式。
2.Shell 格式:ENTRYPOINT command param1 param2
在为 ENTRYPOINT 选择格式时必须小心,因为这两种格式的效果差别很大。
Exec格式
ENTRYPOINT 的 Exec 格式用于设置要执行的命令及其参数,同时可通过 CMD 提供额外的参数。
ENTRYPOINT 中的参数始终会被使用,而 CMD 的额外参数可以在容器启动时动态替换掉。
比如下面的 Dockerfile 片段:
ENTRYPOINT ["/bin/echo", "Hello"]
CMD ["world"]
当容器通过 docker run -it [image] 启动时,输出为:
Hello world
而如果通过 docker run -it [image] everyone 启动,则输出为:
Hello everyone
Shell格式
ENTRYPOINT 的 Shell 格式会忽略任何 CMD 或 docker run 提供的参数。
详细请查阅https://www.cnblogs.com/CloudMan6/p/6875834.html
13.Registry部署私有仓库
使用官方提供的Resgitry镜像来启动本地的私有仓库docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --restart=always registry:2.7
其中-v是设置仓库的数据位置》》修改之后的位置:修改之前的位置(默认时存储在/var/lib/registry),–restart=always表示在退出容器后总是重启容器。
查看容器运行情况docker ps
在浏览器访问网址http://本机IP:5000/v2/
,出现一个空的花括号表示成功。
修改要推送镜像的tag:docker tag 镜像id 新镜像tag
,新镜像tag格式:本地IP:5000/镜像名
,镜像名可根据自己需要更改,但前面的一定要是仓库IP加端口号。
推送镜像格式:docker push 镜像tag
可能会出现错误:
The push refers to repository [10.168.1.137:5000/ubuntu]
Get https://10.168.1.137:5000/v2/: http: server gave HTTP response to HTTPS client
出现这个错误之后是表示需要https的方法才能上传,在/etc/docker/目录下新建文件daemon.json,内容:
{
“registry-mirrors”: [ “https://registry.docker-cn.com”],
“insecure-registries”: [ “本地IP:5000”]
}
然后重启服务:systemctl restart docker
详细:https://blog.csdn.net/xc_zhou/article/details/83243087
上一篇: PHP中 empty() 和 isset() 的区别介绍
下一篇: docker使用教程