Docker|基础篇

30次阅读

共计 3699 个字符,预计需要花费 10 分钟才能阅读完成。

简介
Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 Docker 技术比虚拟机技术更为轻便、快捷。
下面的图片比较了 Docker 和传统虚拟化方式的不同之处。传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。

概念
Docker 包括三个基本概念

镜像(Image)
容器(Container)
仓库(Repository)

如果按面向对象思想:镜像类比如类,容器类比如实例公有仓库:https://hub.docker.com/
Docker 引擎
Docker 引擎是一个包含以下主要组件的客户端服务器应用程序。

一种服务器,它是一种称为守护进程并且长时间运行的程序。
REST API 用于指定程序可以用来与守护进程通信的接口,并指示它做什么。
一个有命令行界面 (CLI) 工具的客户端。

Docker 引擎组件的流程如下图所示:

安装
以下基于 Centos7 以上版本。centos7 安装:https://www.osyunwei.com/arch…docker 安装:下载安装
$ curl -fsSL get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh –mirror Aliyun
启动
$ sudo systemctl enable docker
$ sudo systemctl start docker
配置 Docker 国内加速器
$ curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
Docker 基本操作指令
下载镜像:
$ docker pull tomcat
解析:docker pull [选项] [Docker Registry 地址 [: 端口号]/] 仓库名 [: 标签] 启动容器:
1. 交互式运行
$ docker run -it –rm tomcat bash
后台运行
$docker run –name webserver -d -p 8080:8080 tomcat
解析:-it 指:i 为交互式操作,t 为终端;–rm 指容器退出后随之将其删除;tomcat 指你要启动的镜像;bash 指 tomcat 中的 shell 控制台;–name 指定名称;-d 后台运行;-p 8080:8080 指定端口号(第一个为宿主机端口,第二个为 docker 的端口。
交互式进入容器:
docker exec -it < 容器 id> bash
查看运行中的容器:
docker ps -a
删除容器:
docker rm < 容器 id>
查看容器运行日志:
docker logs -f -t < 容器 id 或容器名称 >
解析:-f: 跟踪容器日志的最近更新;-t: 显示容器日志的时间戳;
清除虚悬镜像:
docker image prune -a -f
标记本地镜像,将其归入某一仓库
docker tag [options “o”>] <image>[:tag “o”>] [repository/ “o”>][username/]name “o”>[:tag]
解析:-f 覆盖已有标记。
将镜像推送至远程仓库,默认为 Docker Hub
docker push name[:tag “o”>]
更多命令可以参考【这里】
Docker 操作(基于 Dockerfile)
在一个 /usr/local/docker 文件中写一个名为 Dockerfile 的文件
#pull down centos image
FROM centos
MAINTAINER test@test.com
#copy jdk and tomcat into image
ADD ./apache-tomcat-7.0.70.tar.gz /root
ADD ./jdk-7u80-linux-x64.tar.gz /root
#set environment variable
ENV JAVA_HOME /root/jdk1.7.0_80
ENV PATH $JAVA_HOME/bin:$PATH
#define entry point which will be run first when the container starts up
ENTRYPOINT /root/apache-tomcat-7.0.70/bin/startup.sh && tail -F /root/apache-tomcat-7.0.70/logs/catalina.out
解析:总体看来就是按照 Dockerfile 的命令规则进行运行 shell 指令关键命令:FROM:指定基础镜像 RUN:执行命令 COPY:< 源路径 >… < 目标路径 >ADD:跟 COPY 相似,如果源文件是 tar 包时,会自动解压。(一般用 copy 指令)CMD:容器启动命令 ENTRYPOINT:入口点 VOLUME:定义匿名卷 EXPOSE:暴露端口 WORKDIR:指定工作目录 USER:指定当前用户 ENV:设置环境变量
编译构建:docker build [选项] < 上下文路径 /URL/->
### 最后有一个点的,它表示上下文。
docker build -t app .
看到 docker build 命令最后有一个 .。. 表示当前目录,而 Dockerfile 就在当前目录。-t app:指定了最终镜像的名称为 app
参考文档

Dockerfie 官方文档
Dockerfile 最佳实践文档
Docker 官方镜像 Dockerfile

Docker 操作(基于 Compose)
Docker Compose 将所管理的容器分为三层,工程(project)由一组关联应用容器组成的一个完整的业务单元。服务(service)一个应用的容器,实际上若干个运行着相同镜像的容器实例。容器(container)Compose 就是通过命令对项目中的一组容器的生命周期进行便捷的管理。
安装: 官网地址:https://github.com/docker/com…
$ sudo curl -L “https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)” -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
$ docker-compose –version
部署项目在 /usr/local/docker 目录下新建一个 docker-compose.yml 文件
version: “3”
services:
web:
restart: always
image: tomcat
container_name: web
ports:
– 8080:8080
volumes:
– /usr/local/docker/nblog/webapps:/usr/local/tomcat/webapps

mysql:
restart: always
image: mysql:5.7.25
container_name: mysql
ports:
– 3306:3306
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: root
command:
–character-set-server=utf8mb4
–collation-server=utf8mb4_general_ci
–explicit_defaults_for_timestamp=true
–lower_case_table_names=1
–max_allowed_packet=128M
volumes:
– db_data:/var/lib/mysql
volumes:
db_data:
docker-compose.yml 常用参数解析:restart:启动容器自自启动。image:镜像 container_name:自定义容器名 ports:端口,第一个是宿主机,第二个是 docker 中的端口 volumes:数据卷,就是宿主机的目录被 docker 共享。这里就是你将你的应用放到指定目录,它就会自动引用进 docker 容器中。environment:环境变量设置。
更多配置:https://docs.docker.com/compo…
启动
$ docker-compose up -d
-d: 指后台运行跟踪日志
$ docker-compose logs -f tomcat
-f:类似于 tail -f
卸载
$ docker-compose down
后续
Docker 持续集成
总结
Docker 与微服务更配哦。
资源:Docker 官方文档 DockerHub 仓库 DockerCompose 一些常用的镜像
最后
如果对 Java、大数据感兴趣请长按二维码关注一波,我会努力带给你们价值。觉得对你哪怕有一丁点帮助的请帮忙点个赞或者转发哦。

正文完
 0