Skip to content

Docker 笔记

black-ant edited this page May 4, 2019 · 1 revision

Docker 笔记

一 . 简述

Docker使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器

-》 组成成分 
    > Docker 镜像(Docker Image) : Docker 镜像是用于创建 Docker 容器的模板
    > Docker 容器(Docker Container) : 容器是独立运行的一个或一组应用
    > Docker 客户端 : Docker 客户端通过命令行或者其他工具使用 Docker API 与 Docker 守护线程通信
    > Docker 主机 :一个物理或者虚拟的机器用于执行 Docker 守护进程和容器
    > Docker 仓库(Docker registries) :Docker 仓库用来保存镜像
    > Docker Machine :Docker Machine是一个简化Docker安装的命令行工具
    > Dockerfiles : Docker Container创建过程的描述脚本
-》其他概念
    > LXC:(Linux Container) :内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源,无需指令解释机制
    > Host OS : 物理存在的计算机上运行的操作系统
    > Guest OS :运行在VM上的操作系统
    > Hypervisor :运行在物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享一套基础物理硬件 , 类似于 虚拟环境中的元操作系统
    > Bootfs : 包含 bootloader 和 kernel, bootloader主要是引导加载kernel, 当boot成功后 kernel 被加载到内存中后 bootfs就被卸载了
    > Rootfx : rootfs包含的就是典型 Linux 系统中的 /dev(外设访问接口信息),/proc(系统设备信息),/bin(系统工具集), /etc(APP配置信息) 等标准目录和文件

二 . 架构

三 . 常用

-》 安装常用命令
   > 安装 docker : yum -y install docker-io
   > 配置下载源 (默认源较缓慢):-> /etc/docker/daemon.json
     |-> "registry-mirrors": ["https://registry.docker-cn.com"]
     |-> 推荐去配置阿里云的镜像加速器 ,免费 ,把地址替换即可 (后台 -> 容器镜像服务 -> 镜像加速器 )
   > 重启服务 :service docker restart
   > 启动服务 :service docker start
   > 测试 :docker run hello-world
   >
   >
   >
   
-》 查看命令   
   > 推荐使用 :docker -help
   > 查看正在运行的docker : docker ps
   > 查看端口映射情况 :docker port 容器ID或容器name
   > 查看 docker log : docker logs [容器ID或容器name]
   > 搜索 :docker search 镜像名
   > 镜像列表 :docker images
   > 拉取镜像 :docker pull 镜像的仓库源/镜像的标签
   > 最近运行的容器 :docker ps -l
   > 正在运行的容器 :docker ps -a
   > 查看版本 :docker version
   > 
   > 
   > 
   
-》 操作命令 
   > 构建镜像 : docker build -t image-name docker-file-location
   > 运行 docker 镜像 :docker run -d image-name
   > 停止运行容器 :docker stop container_id
   > 删除镜像 :docker rmi image-name
   > 删除所有(慎用):docker rmi $(docker images -q)
   > 进入docker 容器 :docker exec -it container-id bash
   >
   >
   >   

四 . Java 运行程序

Test 1 运行 Java 文件
1 .  准备目录 -> mkdir -p /home/mydocker/java-docker-app
2 .  准备运行文件 -> Hello.java
3 .  创建Dockerfile -> touch Dockerfile
4 .  导入dockerfile -> docker build -f /home/mydocker/java-docker-app/Dockerfile
5 .  创建映像( 记得之前需要启动 service) -> docker build -t java-app .
6 .  运行 镜像 -> docker run java-app

Test 2 运行 SpringBoot项目 方法1 - jar 法
1 .  test1 1-4 步
2 .  拷贝jar 文件到 java-docker-app 下 ,修改dockerfile
3 .  构建映像
4 .  运行映像 docker run --net=host --name=mydocker -d -p 8081:8081 mydocker

Test 3 运行 springboot项目 方法2 - build法 
1 .  拷贝项目 src , pom.xml ,target 到 某个文件夹下
2 .  运行 docker 构建命令 -> mvn package docker:build
     |-> 安装 maven (centos 版)
     |-> wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo
     |-> yum -y install apache-maven
     |-> 请配置 dockerfile ,否则报错 HTTP 500 Int 
3 . 运行 -> docker run -p 8010:8010 -t mydocker/demo
     |-> mydocker/demo 对应 pom.xml 中的 <imageName>


附录:
# Dockerfile Java 文件版 
# --------------------------
# 基础镜像
FROM java:8
# 维护者信息
MAINTAINER gang
# 添加本地文件
COPY . /var/www/java  
# 工作目录
WORKDIR /var/www/java  
# 运行
RUN javac Hello.java  
# 构建完成调用
CMD ["java", "Hello"]

# Docker jar 版
# --------------------------
FROM java:8
ADD mydocker.jar
RUN bash -c 'mydocker.jar'
# 配置容器
ENTRYPOINT ["java","-jar","mydocker.jar"]

# Docker build 版
# --------------------------
FROM java:8
VOLUME /home/mydockerboot/mydocker


五 . dockerfile 文件介绍

Dockerfile是一个包含用于组合映像的命令的文本文档 , 可以使用在命令行中调用任何命令。 Docker通过读取Dockerfile中的指令自动生成映像。

组成成分 : Dockerfile 一般由 基础镜像信息 ,维护者信息 ,镜像操作指令 ,容器启动时执行指令 四部分组成

运行流程 : Docker 是从上到下的顺序运行 Dockerfile 指令

常用指令
> FROM : 基础镜像 -> tag 标签 及 digest 标签
      |-> 无标签使用基础版本 :FROM <image> 
      |-> tag 用于定义版本 : FROM <image>:<tag>  -> FROM mysql:5.6
  
> MAINTAINER : 维护者信息 -> 接字符串即可
      |-> name 中写入维护者即可 :MAINTAINER <name>
  
> RUN : 构建镜像是执行的命令
      |-> shell执行 : RUN <command>
      |-> exec执行 :  RUN ["executable", "param1", "param2"]
  
> ADD : 将本地文件添加到容器中
      |-> ADD <src>... <dest> ->  ADD test /absoluteDir/ 
  
> COPY : 类似于ADD ,但不会解压文件
  
> CMD : 构建后调用
      |-> CMD ["executable","param1","param2"] 
      |-> CMD command param1 param2
      
> ENTRYPOINT : 配置容器

> LABEL : 为镜像添加元数据
      |-> LABEL <key>=<value> <key>=<value> <key>=<value>

> ENV : 设置环境变量
      |-> ENV <key> <value> ->  ENV myDog Rex The Dog
      |-> ENV <key>=<value>
       
> EXPOSE :指定交互端口
      |-> EXPOSE <port> [<port>...] -> EXPOSE 8080
      
> VOLUME :指定持久化目录
      |-> VOLUME ["/path/to/dir"]

> WORKDIR :工作目录
      |->  WORKDIR /path/to/workdir
      
> USER : 指定运行容器时的用户名或 UID
      |->  USER user:group
      
> ARG : 用于指定传递给构建运行时的变量

> ONBUILD : 设置镜像触发器

Clone this wiki locally