Docker学习笔记

Docker 包括三个基本概念:

  • 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。

  • 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

  • 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。

简单运行

runoob@runoob:~$ docker run ubuntu:15.10 /bin/echo "Hello world" 
Hello world
  • docker: Docker 的二进制执行文件。

  • run: 与前面的 docker 组合来运行一个容器。

  • ubuntu:15.10 指定要运行的镜像,Docker 首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。

  • /bin/echo "Hello world": 在启动的容器里执行的命令

容器启动参数

  • -t: 在新容器内指定一个伪终端或终端。

  • -i: 允许你对容器内的标准输入 (STDIN) 进行交互。

  • -d: 后台模式,以进程方式运行。输出为容器 ID,通过docker ps命令查看

    • 进入容器:

    • docker attach:

    • docker exec:不会导致容器的停止。

  • -P: 将容器内部使用的网络端口随机映射到我们使用的主机上。

  • -p:指定映射端口

    • docker port ID查看指定容器端口

  • -f:docker logs 像使用 tail -f 一样来输出容器内部的标准输出。

容器

  • 获取镜像:$ docker pull ubuntu

  • 启动容器:$ docker run -it ubuntu /bin/bash

  • 启动已停止运行的容器:$ docker start ContainerID

  • 停止一个容器: $ docker stop <容器 ID>

  • 重启: $ docker restart <容器 ID>

  • 删除容器: $ docker rm -f <容器 ID>

镜像

  • 列出镜像列表:docker images

  • 获取一个新的镜像:$ docker pull ubuntu:13.10

  • 查找镜像:$ docker search ubuntu

  • 下载镜像:$ docker pull ubuntu

  • 删除镜像:$ docker rmi ubuntu

  • 创建镜像:

    • 从已经创建的容器中更新镜像,并且提交

      • 运行中的容器中使用apt-get update 命令进行更新,并提交

      • docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2

      • -m: 提交的描述信息

      • -a: 指定镜像作者

      • e218edb10161:容器 ID

      • runoob/ubuntu:v2: 指定要创建的目标镜像名

    • 使用 Dockerfile 指令来创建一个新的镜像

      • 创建一个 Dockerfile 文件

      • 通过 docker build 命令构建镜像$ docker build -t runoob/centos:6.7 .

      • -t :指定要创建的目标镜像名

      • . :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径

  • 设置镜像标签:$ docker tag 860c279d2fec runoob/centos:dev

容器连接

网络端口映射

  • -P :是容器内部端口随机映射到主机的端口。

  • -p : 是容器内部端口绑定到指定的主机端口。

查看端口的绑定情况:docker port

Docker 容器互联

  • 容器命名

    • 使用 --name 标识来命名容器

  • 新建网络$ docker network create -d bridge test-net

    • -d:参数指定 Docker 网络类型,有 bridge、overlay。

  • 连接容器

    • 运行时添加参数指定网络--network test-net

    • 使用ping命令验证连接

  • 配置DNS:

    • 宿主机/etc/docker/daemon.json

    • 手动指定容器的配置

      • $ docker run -it --rm -h host_ubuntu --dns=114.114.114.114 --dns-search=test.com ubuntu

      • --rm:容器退出时自动清理容器内部的文件系统。

      • -h HOSTNAME 或者 --hostname=HOSTNAME: 设定容器的主机名,它会被写到容器内的 /etc/hostname 和 /etc/hosts。

      • --dns=IP_ADDRESS: 添加 DNS 服务器到容器的 /etc/resolv.conf 中,让容器用这个服务器来解析所有不在 /etc/hosts 中的主机名。

      • --dns-search=DOMAIN: 设定容器的搜索域,当设定搜索域为 .example.com 时,在搜索一个名为 host 的主机时,DNS 不仅搜索 host,还会搜索 host.example.com。

仓库管理

  • 登陆:$ docker login

  • 退出:$ docker logout

  • 推送:

    • $ docker tag ubuntu:18.04 username/ubuntu:18.04

    • $ docker push username/ubuntu:18.04

Dockerfile

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

SpringBoot应用部署 - docker镜像打包,运行和管理

 

FROM openjdk:8-jre # 基镜像一般采用openjdk MAINTAINER wsy # 创建镜像的作者,一般是作者邮件地址 WORKDIR / # WORKDIR指令设置Dockerfile中的任何RUN,CMD,ENTRPOINT,COPY和ADD指令的工作目录。 ADD target/springboot-demo-helloworld.jar app.jar # 表示将jar包添加到镜像中,并重命名app.jar EXPOSE 8080 # 表示暴露的端口是8080 ENTRYPOINT ["java", "-jar"] # 表示启动时运行 java -jar CMD ["app.jar"] # 表示参数,这里是运行的具体的jar

Docker Compose

Compose 是用于定义和运行多容器 Docker 应用程序的工具。

  • 使用 YML 文件来配置应用程序需要的所有服务。

  • 使用命令,从 YML 文件配置中创建并启动所有服务。

Compose 使用的三个步骤:

  • 使用 Dockerfile 定义应用程序的环境。

  • 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。

  • 最后,执行 docker-compose up 命令来启动并运行整个应用程序。

yml 配置

Docker Compose -- yml文件配置指令参考

镜像分层

Docker镜像是由一系列层来构成的,每层代表Dockerfile中的一条指令

 

FROM ubuntu:18.04 COPY . /app RUN make /app CMD python /app/app.py

Dockerfile包含四个命令,每个命令都会新创建一个层。

  • FROM语句会从ubuntu:18.04镜像创建一个层。

  • COPY指令会从Docker客户端的当前目录下添加一些文件。

  • RUN指令使用了make指令来构建。

  • CMD是☞在容器中运行什么命令。

创建新容器时,每一层都会彼此堆叠,可以在基础层的基础上添加新的可写容器层。对容器的所做的所有更改都将写入到该可写容器层中。

下图显示了基于Ubuntu 15.04 的容器。对于Image layers都是Read Only的。

容器和层

对于容器和镜像(containerimage)的主要区别就是顶部的可写层(the top writable layer),在容器中添加数据或者修改现有数据的所有读写操作都会存储在此可写层中。删除容器后,可写层也会被删除,而基础镜像则保持不变。

每个容器都会有自己的可写层,所有的改变都存储在该容器层中。多个容器可以共享对同一基础镜像的访问,但可以拥有自己的数据状态。

资料

Docker Hub

Docker 教程(图文讲解) 

Docker 教程 | 菜鸟教程

遇到的问题:

外部访问容器

Docker 启动后无法访问

原因:启动时未指定端口

docker run -itd -p 8081:8080 --name myContainerName <imageID>

  • 本地的 8081 端口映射到容器的 8080 端口

  • hostPort:containerPort: 映射所有接口地址

  • ip:hostPort:containerPort: 映射到指定地址的指定端口

  • ip::containerPort: 映射到指定地址的任意端口

Docker容器端口映射手册 · Docker

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值