docker命令以及自定义镜像的两种方法

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

docker基本命令

查看已有docker镜像:docker images
搜索docker镜像:docker search 镜像名称
下载镜像:docker pull 镜像:版本号,例:docker pull python:3.5
运行交互式容器: docker run -it 镜像:标签 /bin/bash,例:docker run -it ubuntu:15.10 /bin/bash,其中-i代表允许你对容器内的标准输入 (STDIN) 进行交互,-t表示在新容器内指定一个伪终端或终端。
运行容器参数: -d:让容器在后台运行,-P:将容器内部使用的网络端口映射到主机上,-p:设置所映射的端口,–name:指定容器名称。
查看运行中的容器: docker ps
查看全部容器: docker ps -a
停止容器: docker stop 容器名称/容器id
启动容器: docker start 容器名称/容器id
重启容器: docker restart 容器名称/容器id
删除容器:docker rm 容器名称/容器id
删除运行中的容器docker rm -f 容器名称/容器id
查询最后一次创建的容器: docker ps -l
查看端口映射情况:docker port 容器名称/容器id
查看容器内部运行的进程:docker top 镜像名称/容器id

自定义镜像的两种方法

1、更新原有镜像:
(1)进入容器进行操作。
(2)exit退出容器。
(3)使用命令docker commit来提交容器副本:

docker commit -m="提交的描述信息" -a="指定镜像作者" 容器名称/容器id 目标镜像名

在这里插入图片描述
(4)更新镜像并删除旧镜像:假设原镜像为centos:latest,新操作后的新镜像为new_centos:latest。

  • 查看是否存在依赖:docker inspect --format='{{.Id}} {{.Parent}}' $(docker images --filter since=原镜像id --quiet)
    在这里插入图片描述
  • 保存新镜像:docker save -o centos.tar new_centos:latest
    在这里插入图片描述
  • 删除新旧镜像:docker rmi 新镜像id 旧镜像id ,(删除之前需要需要先删除容器)
    在这里插入图片描述
    在这里插入图片描述
  • load新镜像:docker load -i ./centos.tar
    -
  • 此时我们运行该镜像可以看到1.py文件:
    在这里插入图片描述

2、使用Dockerfile自定义镜像:
Dockerfile有一些命令用于自定义镜像:
FROM:FROM <image>[:<tag>] [AS <name>],设置基础镜像,即该镜像所依赖的镜像。
RUN:RUN <command> \ ["executable", "param1", "param2"],执行shell脚本。
CMD:CMD ["executable","param1","param2"] \ ["param1","param2"] \ command param1 param2,启动程序后执行的默认命令,DockerFile中只有一个CMD,多于一个将执行最后一个。
LABEL:LABEL <key>=<value> <key>=<value> ...,镜像标签。
EXPOSE:EXPOSE <port> [<port>/<protocol>...],暴露容器的端口,EXPOSE 仅仅是声明容器打算使用什么端口,并不会自动在宿主进行端口映射。
ENV:ENV <key> <value> \ <key>=<value>,设置容器环境变量,可以使用docker run --env <key>=<value>修改环境变量。
ADD:ADD [--chown=<user>:<group>] <src>... <dest> \ [--chown=<user>:<group>] ["<src>",... "<dest>"],拷贝一个新文件,或者文件夹或者远程文件的 URLS,把他们添加到,镜像的文件系统中。 为绝对路径或者由WORKDIR定义的相对路径。
COPY:COPY [--chown=<user>:<group>] <src>... <dest> / [--chown=<user>:<group>] ["<src>",... "<dest>"],与ADD命令相似。
ENTRYPOINT:ENTRYPOINT ["executable", "param1", "param2"] / command param1 param2,ENTRYPOINT 的目的和 CMD 一样,都是在指定容器启动程序及参数,ENTRYPOINT 在运行时也可以替代,不过比 CMD 要略显繁琐,需要通过 docker run 的参数 –entrypoint 来指定。当指定了 ENTRYPOINT 后, CMD 的含义就发生了改变,不再是直接的运行其命令,而是将CMD 的内容作为参数传给 ENTRYPOINT 指令。
ENTRYPOINT与CMD的比较:

  • 当有多个ENTRYPOINT CMD它们都只执行最后一个
  • 当容器为一个可执行文件时应该定义ENTRYPOINT
  • 当同时定义ENTRYPOINT 和 CMD时,CMD为ENTRYPOINT的默认参数
  • 当docker执行run命令时,在里面指定CMD时,CMD将会被重写。

VOLUME:VOLUME ["/data"],在制作镜像时挂载卷。会在宿主机上自动生成一个对应的共享目录。
USER :USER <user>[:<group>] / <UID>[:<GID>],给镜像添加一个用户。
WORKDIR :WORKDIR /path/to/workdir or WORKDIR to_workdir /path/to/workdir,为RUN, CMD, ENTRYPOINT, COPY, ADD 创建工作目录。
ARG:ARG <name>[=<default value>],dockerfile中的变量。
(1)创建一个Dockerfile文件,然后进入该文件编写自定义镜像:

 1 FROM    centos:latest                                                                                                                   
 2 RUN     /bin/echo 'root:950824' |chpasswd
 3 RUN     useradd test
 4 RUN     /bin/echo 'test:950824' |chpasswd
 5 EXPOSE  22
 6 EXPOSE  80
 7 CMD     /usr/sbin/sshd -D

(2)使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像:

docker build -t centos:latest .

-t指定要创建的目标镜像名,. 指定Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径。在这里插入图片描述
(3)使用docker images查看自定义的镜像:
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值