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:让容器在后台运行,使用docker exec -it 容器ID /bin/bash进入运行的容器
-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提交,记住这个容器的id
docker 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 "bourbon@1mcloud.com"
	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 后输出:

HelloWorld

此时的环境变量name已经被解析,被HelloWorld替换。
Exec格式: [“executable”, “param1”, “param2”, …]
例如:

RUN ["apt-get", "install", "python3"]  	
CMD ["/bin/echo", "Hello world"]  
ENTRYPOINT ["/bin/echo", "Hello world"]

当指令执行时,会直接调用,不会被shell解析的。
例如:

ENV name HelloWorld
ENTRYPOINT  ["/bin/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会被忽略,输出:

root@10a32dc7d3d3:/#
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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值