资讯专栏INFORMATION COLUMN

Docker|基础篇

OBKoro1 / 1426人阅读

摘要:简介在容器的基础上,进行了进一步的封装,从文件系统网络互联到进程隔离等等,极大的简化了容器的创建和维护。一种服务器,它是一种称为守护进程并且长时间运行的程序。容器就是通过命令对项目中的一组容器的生命周期进行便捷的管理。

简介

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">] [: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、大数据感兴趣请长按二维码关注一波,我会努力带给你们价值。觉得对你哪怕有一丁点帮助的请帮忙点个赞或者转发哦。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/27779.html

相关文章

  • Docker镜像细节

    摘要:简单来说是镜像的源码。例如,的镜像镜像,在中是一个基础镜像的镜像也是镜像那么镜像和共享同一个基础镜像层,提高了存储效率。 前言 只有光头才能变强。 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y showImg(https://segmentfault.com/img/remote/14600000180560...

    xiaokai 评论0 收藏0
  • Docker入门-镜像使用

    摘要:获取镜像从中获取镜像命令为选项地址端口号仓库名标签比如镜像是由多层存储所构成。并且下载结束后,给出该镜像完整的的摘要,以确保下载一致性。运行拥有镜像后,可以以此镜像为基础启动一个容器。 使用镜像 从仓库获取镜像; 管理本地主机上的镜像; 镜像实现的基本原理。 获取镜像 从DockerHub中获取镜像 命令为docker pull docker pull [选项] [Docker R...

    rubyshen 评论0 收藏0
  • Docker入门-镜像使用

    摘要:获取镜像从中获取镜像命令为选项地址端口号仓库名标签比如镜像是由多层存储所构成。并且下载结束后,给出该镜像完整的的摘要,以确保下载一致性。运行拥有镜像后,可以以此镜像为基础启动一个容器。 使用镜像 从仓库获取镜像; 管理本地主机上的镜像; 镜像实现的基本原理。 获取镜像 从DockerHub中获取镜像 命令为docker pull docker pull [选项] [Docker R...

    JasonZhang 评论0 收藏0
  • Docker操作常用命令-镜像

    摘要:获取镜像选项地址端口号仓库名标签例具体选项可通过命名看到默认为,地址格式为域名例运行容器仓库名以上面的为例,如果我们打算启动里面的并进行交互式操作这是两个参数,一个是交互式操作,一个是终端。 获取镜像 docker pull [选项] [Docker Registry 地址[:端口号]/] 仓库名[:标签] 例:docker pull ubuntu:16.04 具体选项可通过 dock...

    joyqi 评论0 收藏0
  • 曾金龙:迅雷云的Docker开发实践

    摘要:问能否谈一下迅雷云使用的过程其实最初的时候,迅雷团队对是怀有谨慎的态度的。三调度算法是迅雷云定制优化的。迅雷在使用这方面一直没有把数据层面交给迅雷云之外的系统。 非商业转载请注明作译者、出处,并保留本文的原始链接:http://www.ituring.com.cn/article/201256 曾金龙就职于迅雷网络,是国内覆盖面最广的迅雷P2P引擎核心研发成员。他毕业于中山大...

    iflove 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<