社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  docker

Docker|基础篇

xbmchina • 5 年前 • 150 次点击  
阅读 13

Docker|基础篇

简介

Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 Docker 技术比虚拟机技术更为轻便、快捷。

下面的图片比较了 Docker 和传统虚拟化方式的不同之处。传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。

传统虚拟化

Docker

概念

Docker 包括三个基本概念
  • 镜像(Image)
  • 容器(Container)
  • 仓库(Repository) 如果按面向对象思想:镜像类比如容器类比如实例 公有仓库:hub.docker.com/
Docker 引擎

Docker 引擎是一个包含以下主要组件的客户端服务器应用程序。

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

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

安装

以下基于Centos7以上版本。

centos7安装:www.osyunwei.com/archives/78…

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
复制代码
    1. 后台运行
$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

参考文档

Docker操作(基于Compose)

Docker Compose 将所管理的容器分为三层,

工程(project) 由一组关联应用容器组成的一个完整的业务单元。

服务(service) 一个应用的容器,实际上若干个运行着相同镜像的容器实例。

容器(container) Compose就是通过命令对项目中的一组容器的生命周期进行便捷的管理。

安装:

官网地址:github.com/docker/comp…

$ 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:环境变量设置。

更多配置docs.docker.com/compose/com…

启动

$ docker-compose up -d
复制代码

-d:指后台运行 跟踪日志

$ docker-compose logs -f tomcat 
复制代码

**-f:**类似于tail -f

卸载

$ docker-compose down
复制代码

后续

Docker持续集成

总结

Docker与微服务更配哦。

资源:

Docker官方文档

DockerHub仓库

DockerCompose

一些常用的镜像

最后

如果对 Java、大数据感兴趣请长按二维码关注一波,我会努力带给你们价值。觉得对你哪怕有一丁点帮助的请帮忙点个赞或者转发哦。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/31601
 
150 次点击