概述
一、docker概念
- 镜像:
一个镜像可以包含一个完整的 ubuntu操作系统环境,里面仅安装了 Apache或用户需要的其它应用程序。用户可以定制属于自己的镜像。
- 容器:
- 容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
- 可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
- 仓库:
- 仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)
- 当用户创建了自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了。
Docker 仓库的概念跟 Git 类似。
二、docker场景
- docker安装:针对使用的系统,选择安装方式 docker官网
- docker通常用于如下场景:
- web应用的自动化打包和发布;
- 自动化测试和持续集成、发布;
- 在服务型环境中部署和调整数据库或其他的后台应用;
- 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。
三、docker命令
- 获取镜像:
-
docker search 镜像:从仓库搜索镜像
-
docker pull 镜像:从docker hub 仓库获取
-
docker pull 指定完整的仓库注册服务器地址 :从指定仓库地址获取镜像
-
docker run 镜像: 使用镜像,运行一个实例
拉取并运行tomcat镜像latest版本
$ docker run -it tomcat:latest
-t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上, -i 则让容器的标准输入保持打开。-d 让 Docker 容器在后台以守护态(Daemonized)形式运行
-
docker images: 列出本地已有的镜像
-
docker tag sourceTag targetTag :给镜像sourceTag创建一个targetTag镜像
$ docker tag tomat_maven_yehao:latest registry-xxx.com/tomcat_maven_yehao:1.0.0
-
docker push 镜像:上传镜像到仓库
$ docker push registry-xxx.com/tomcat_maven_yehao:1.0.0
-
docker save 镜像:导出镜像到本地文件
$ sudo docker save -o ubuntu_14.04.tar ubuntu:14.04
-
docker load :从导出的本地文件中再导入到本地镜像库
$ sudo docker load --input ubuntu_14.04.tar
-
docker rmi 镜像:移除本地的镜像,可以使用 命令。注意 docker rm 命令是移除容器。
注意:在删除镜像之前要先用 docker rm 删掉依赖于这个镜像的所有容器。
-
docker stop:终止一个运行中的容器
-
docker export:导出容器快照到本地文件
$ sudo docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7691a814370e ubuntu:14.04 "/bin/bash" 36 hours ago Exited (0) 21 hours ago
$ sudo docker export 7691a814370e > ubuntu.tar
-
docker import :从容器快照文件中再导入为镜像
-
docker exec # 在容器里执行一个命令,可以执行bash进入交互式
$ docker exec -it containerId /bin/bash
##进入容器以bash方式运行
Dockerfile编写
- 一.Dockerfile 基本结构 一般的,Dockerfile 分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。’#’ 为 Dockerfile 中的注释。先看下面一个小例子:
# This my first nginx Dockerfile # Version 1.0 # Base images 基础镜像 FROM centos #MAINTAINER 维护者信息 MAINTAINER author #ENV 设置环境变量 ENV PATH /usr/local/nginx/sbin:$PATH #ADD 文件放在当前目录下,拷过去会自动解压 ADD nginx-1.8.0.tar.gz /usr/local/ ADD epel-release-latest-7.noarch.rpm /usr/local/ #RUN 执行以下命令 RUN rpm -ivh /usr/local/epel-release-latest-7.noarch.rpm RUN yum install -y wget lftp gcc gcc-c++ make openssl-devel pcre-devel pcre && yum clean all RUN useradd -s /sbin/nologin -M www #WORKDIR 相当于cd WORKDIR /usr/local/nginx-1.8.0 RUN ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-pcre && make && make install RUN echo "daemon off;" >> /etc/nginx.conf #EXPOSE 映射端口 EXPOSE 80 #CMD 运行以下命令 CMD ["nginx"] FROM : 指定基础镜像,要在哪个镜像建立
-
格式为 FROM <image> 或FROM <image>:<tag> 。
第一条指令必须为 FROM 指令。
-
MAINTAINER:指定维护者信息
格式为 MAINTAINER <name>
-
RUN:在镜像中要执行的命令
格式为 RUN <command> 或 RUN ["executable", "param1", "param2"] 前者将在 shell 终端中运行命令,即 /bin/bash -c ;后者则使用 exec 执行。指定使用其它终端可以通过第二种方式实现,例如 RUN [“/bin/bash”, “-c”,”echo hello”] 。
-
WORKDIR:指定当前工作目录,相当于 cd
格式为 WORKDIR /path/to/workdir 为后续的 RUN 、 CMD 、 ENTRYPOINT 指令配置工作目录。 可以使用多个 WORKDIR 指令,后续命令如果参数是相对路径,则会基于之前命令指定的路径。例如 WORKDIR /a WORKDIR b >> WORKDIR c >> RUN pwd 则最终路径为 /a/b/c 。
-
EXPOSE:指定容器要打开的端口
格式为 EXPOSE <port> [<port>...] 告诉 Docker 服务端容器暴露的端口号,供互联系统使用。在启动容器时需要通过 -P,Docker 主机会自动分配一个端口转发到指定的端口。
-
ENV:定义环境变量
格式为 ENV <key> <value> 。 指定一个环境变量,会被后续 RUN 指令使用,并在容器运行时保持。 例如: ENV PATH /usr/local/nginx/sbin:$PATH
-
COPY :复制本地主机的 (为 Dockerfile 所在目录的相对路径)到容器中的
格式为 COPY 。
-
ADD:相当于 COPY,但是比 COPY 功能更强大
格式为 ADD <src> <dest> 该命令将复制指定的 到容器中的 。 其中 可以是Dockerfile所在目录的一个相对路径;也可以是一个 URL;还可以是一个 tar 文件,复制进容器会自动解压。
-
VOLUME:挂载目录
格式为VOLUME ["/data"] 创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等。
-
USER
格式为 USER daemon 指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户。当服务不需要管理员权限时,可以通过该命令指定运行用户。并且可以在之前创建所需要的用户,例如: RUN useradd -s /sbin/nologin -M www。
-
ENTRYPOINT
两种格式: - [ ] ENTRYPOINT ["executable", "param1", "param2"] - [ ] ENTRYPOINT command param1 param2 (shell中执行) > 配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖。每个 Dockerfile 中只能有一个 ENTRYPOINT ,当指定多个时,只有最后一个起效。
-
CMD
支持三种格式 CMD ["executable","param1","param2"] 使用 exec 执行,推荐方式; CMD command param1 param2 在 /bin/bash 中执行,提供给需要交互的应用; CMD ["param1","param2"] 提供给 ENTRYPOINT 的默认参数; 指定启动容器时执行的命令,每个 Dockerfile 只能有一条 CMD 命令。如果指定了多条命令,只有最后一条会被执行。如果用户启动容器时候指定了运行的命令,则会覆盖掉 CMD 指定的命令。
-
ONBUILD:在构建本镜像时不生效,在基于此镜像构建镜像时生效
格式为 ONBUILD [INSTRUCTION] 配置当所创建的镜像作为其它新创建镜像的基础镜像时,所执行的操作指令。 ENTRYPOINT 和 CMD 的区别:ENTRYPOINT 指定了该镜像启动时的入口,CMD 则指定了容器启动时的命令,当两者共用时,完整的启动命令像是 ENTRYPOINT + CMD 这样。使用 ENTRYPOINT 的好处是在我们启动镜像就像是启动了一个可执行程序,在 CMD 上仅需要指定参数;另外在我们需要自定义 CMD 时不容易出错。
使用 CMD 的 Dockerfile: [root@sta2 test]# cat Dockerfile FROM mysql CMD ["echo","test"] 使用 ENTRYPOINT 的 Dockerfile: [root@sta2 entrypoint]# cat Dockerfile FROM mysql ENTRYPOINT ["echo","test"]
Dockerfile
-
自定义镜像示例 Dockerfile
FROM centos:7 MAINTAINER yehao "yehao@helijia.com" RUN yum -y install wget #安装jdk #拷贝当前目录的jdk1.7到镜像中的/usr/local/jdk1.7 COPY jdk1.7 /usr/local/jdk1.7 #安装tomcat RUN wget -P /usr/local/tomcat https://mirrors.cnnic.cn/apache/tomcat/tomcat-7/v7.0.82/bin/apache-tomcat-7.0.82.tar.gz RUN tar xzf /usr/local/tomcat/apache-tomcat-7.0.82.tar.gz -C /usr/local/tomcat RUN rm -rf /usr/local/tomcat/apache-tomcat-7.0.82.tar.gz #安装maven RUN wget -P /usr/local/maven https://mirrors.cnnic.cn/apache/maven/maven-3/3.5.2/binaries/apache-maven-3.5.2-bin.tar.gz RUN tar xzf /usr/local/maven/apache-maven-3.5.2-bin.tar.gz -C /usr/local/maven RUN rm -rf /usr/local/maven/apache-maven-3.5.2-bin.tar.gz #配置环境变量 ENV JAVA_HOME /usr/local/jdk1.7 ENV CATALINA_HOME /usr/local/tomcat/apache-tomcat-7.0.82 ENV M2_HOME /usr/local/maven/apache-maven-3.5.2 ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin:$M2_HOME/bin #暴露端口 EXPOSE 8080 #启动tomcat服务器 CMD ["/usr/local/tomcat/apache-tomcat-7.0.82/bin/catalina.sh","run"]
-
运行自己的的web项目 Dockerfile
FROM registry-xxx.com/tomcat_maven ##基础镜像 COPY . /code RUN cd /code && mvn clean package -Dmaven.test.skip=true && cp ./target/*.war /usr/local/tomcat/webapps WORKDIR /usr/local/tomcat CMD ["/usr/local/tomcat/bin/catalina.sh","run"]
docker资源
- Docker官方英文资源:
- docker官网:http://www.docker.com
- Docker windows入门:https://docs.docker.com/windows/
- Docker Linux 入门:https://docs.docker.com/linux/
- Docker mac 入门:https://docs.docker.com/mac/
- Docker 用户指引:https://docs.docker.com/engine/userguide/
- Docker 官方博客:http://blog.docker.com/
- Docker Hub: https://hub.docker.com/
- Docker开源: https://www.docker.com/open-source
- Docker中文资源:
- Docker中文网站:http://www.docker.org.cn
- Docker入门教程: http://www.docker.org.cn/book/docker.html
- Docker安装手册:http://www.docker.org.cn/book/install.html
- 一小时Docker教程 :https://blog.csphere.cn/archives/22
- docker从入门到实践:http://dockerpool.com/static/books/docker_practice/index.html
- Docker纸质书:http://www.docker.org.cn/dockershuji.html
- DockerPPT:http://www.docker.org.cn/dockerppt.html
最后
以上就是能干玫瑰为你收集整理的Docker--docker使用及自定义Dockerfile构建镜像的全部内容,希望文章能够帮你解决Docker--docker使用及自定义Dockerfile构建镜像所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复