一、概念
docker是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源。 docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的linux服务器,也可以实现虚拟化。 容器是完全使用沙箱机制,相互之间不会有任何接口(类iphone的app),并且容器开销极其低。
二、docker优势
容器化越来越受欢迎,因为容器是: 灵活:即使是最复杂的应用也可以集装箱化。 轻量级:容器利用并共享主机内核。 可互换:您可以即时部署更新和升级。 便携式:您可以在本地构建,部署到云,并在任何地方运行。 可扩展:您可以增加并自动分发容器副本。 可堆叠:您可以垂直和即时堆叠服务。
三、docker重要的三个概念
1、image镜像,镜像是一个只读模板,可以通过repostory仓库拉取镜像或使用已有的镜像
2、container容器,容器是从镜像创建的运行实例
3、repostory仓库,存储镜像仓库
四、docker简单命令
1、通用命令
#1、查看版本号 docker version #2、启动docker sudo service docker start #3、停止docker sudo service docker stop # 4、重启docker sudo service docker restart
2、镜像命令
#1、列出所有镜像 docker image ls # 上面的命令时省略了 --all docker image ls --all #2、拉取镜像 #如果不指定版本号,默认拉取最新版本的镜像 docker image pull <镜像名称:版本号> #3、删除镜像 #删除的时候,必须注意是否有容器在运行当前镜像文件 #如果在使用,则需要先删除容器,才能删除镜像 docker image rm <镜像名称/镜像ID> #4、把docker中的镜像打包成文件 #用于分享发送给他人,或备份 docker save -o <文件名.tar.gz> <镜像名> #5、把镜像文件加载到docker中 docker load -i <文件名.tar> #6、把容器保存成镜像 docker commit <容器名称/容器ID> <新镜像名>
2.1、镜像获取
镜像获取的方式
1、repostory仓库拉取镜像
2、将容器保存成镜像
3、dockerfile制作镜像
Dockerfile <文件名/镜像名>
dockerfile的工作流程:
1、从FROM头部指定的镜像运行一个容器 2、做出指令,对容器进行修改 3、执行类似docker commit的操作,创建一个新的镜像层 4、基于此镜像创建一个新容器
dockerfile基本使用
#1、FROM: 构建镜像基于哪个镜像 FROM centos7 #2、MAINTAINER: 镜像维护者姓名或邮箱地址 MAINTAINER admin #3、RUN: 构建镜像时运行的shell命令 #RUN在building时运行,可以写多条 RUN yum -y install httpd #4、CMD: 运行容器时执行的shell命令 CMD ["/bin/bash"] #5、EXPOSE: 声明容器的服务端口 EXPOSE 80 443 #6、ENV: 设置容器环境变量 ENV MYSQL_ROOT_PASSWORD 123.com #7、ADD: 拷贝文件或目录到镜像,如果是URL或压缩包会自动下载或自动解压 ADD <源文件>… <目标目录> ADD [“源文件”…“目标目录”] #8、COPY: 拷贝文件或目录到镜像容器内 #跟ADD类似,但不具备自动下载或解压功能 #不支持绝对路径 COPY <文件名> #9、ENTRYPOINT: 运行容器时执行的shell命令 ENTRYPOINT ["/bin/bash","-c",“command”] ENTRYPOINT /bin/bash -c ‘command #10、VOLUME: 指定容器挂载点到宿主机自动生成的目录或其他容器 VOLUME ["/var/lib/mysql"] #11、USER: 为RUN、CMD、和ENTRYPOINT执行命令指定运行用户 #12、*WORKDIR: 为RUN、CMD、ENTRYPOINT、COPY和ADD设置工作目录,意思为切换目录 WORKDIR: /var/lib/mysql = cd /var/lib/mysql #13、HEALTHCHECK: 健康检查 #14、ARG: 构建时指定的一些参数 #######注意####### """ RUN是有条件限制的(好像是200条) CMD和ENTRYPOINT在运行container时运行,只能写一条,如果写多条,最后一条生效 CMD在run时可以被COMMAND覆盖,ENTRYPOINT不会被COMMAND覆盖,但可以指定–entrypoint覆盖。 如果在Dockerfile里需要往镜像内导入文件,则,此文件或目录必须在Dockerfile所在目录或子目录下。 一个目录下,只能有一个Dockerfile文件,并且名称的大小写严格按照要求: Dockerfile. """
3、容器命令
必须先有镜像,才能运行创建容器,需要指定使用的镜像名,并且设置创建容器以后,执行对应的第一条命令
#1、创建容器 docker run <参数选项> <镜像名称> <命令> #2、创建容器后不操作 docker run hello-world #3、使用ubuntu镜像创建一个镜像 docker pull ubuntu:18.04 docker run -it --name=ubuntu1 ubuntu:18.04 bash #4、查看所有正在启动运行的容器 docker container ls #5、查看所有容器,无论是否运行 docker container ls --all #6、启动容器【可以同时启动多个容器,容器之间使用空格隔开】 # 启动一个容器 docker container start <容器名称/容器ID> # 启动多个容器 docker container start <容器名称/容器ID> <容器名称/容器ID> <容器名称/容器ID> #7、停止容器 docker container stop <容器名称/容器ID> # 8、杀死容器,在容器无法停止的时使用 docker container kill <容器名称/容器ID> #9、进入容器,要进入容器,必须当前容器是启动状态的 docker container exec -it <容器名称/容器ID> #10、删除容器 docker container rm <容器名称/容器ID> ######docker run选项参数###### """ 必须启动的时候,让容器运行bash解析器,才能在接下来的操作让容器不会立刻关闭,而且也能够让我们可以输入linux终端命令, 如果我们一般创建一个容器,选项都是: -itd -t 表示容器启动后会进入其命令行终端 -i 表示以“交互模式”运行容器 --name 表示设置容器的名称 -d 创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t 两个参数,创建后就会自动进去容器) """
标签:容器,container,ENTRYPOINT,镜像,docker,运行 From: https://www.cnblogs.com/songyunjie/p/16852131.html