Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的建立和维护。使得 Docker 技术比虚拟机技术更为轻便、快捷。html
下面的图片比较了 Docker 和传统虚拟化方式的不一样之处。传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操做系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有本身的内核,并且也没有进行硬件虚拟。所以容器要比传统虚拟机更为轻便。mysql
若是按面向对象思想:镜像类好比类,容器类好比实例
公有仓库:https://hub.docker.com/linux
Docker 引擎是一个包含如下主要组件的客户端服务器应用程序。git
Docker 引擎组件的流程以下图所示:github
如下基于Centos7以上版本。
centos7安装:https://www.osyunwei.com/arch...
docker安装:
下载安装web
$ curl -fsSL get.docker.com -o get-docker.sh $ sudo sh get-docker.sh --mirror Aliyun
启动sql
$ sudo systemctl enable docker $ sudo systemctl start docker
配置Docker 国内加速器docker
$ curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
下载镜像:shell
$ docker pull tomcat
解析:docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
启动容器:apache
$ 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">]
更多命令能够参考【这里】
在一个/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
参考文档
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、大数据感兴趣请长按二维码关注一波,我会努力带给大家价值。以为对你哪怕有一丁点帮助的请帮忙点个赞或者转发哦。