-
Notifications
You must be signed in to change notification settings - Fork 25
Docker 笔记
black-ant edited this page May 4, 2019
·
1 revision
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
>
>
>
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是一个包含用于组合映像的命令的文本文档 , 可以使用在命令行中调用任何命令。 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 : 设置镜像触发器