简介

目录

简介

一个开源的应用容器引擎

基本操作

镜像

容器

数据卷 

Dokerfile自定义镜像:

Docker-Compose  

Docker搭建私有镜像仓库

可视化工具(Portainer)

常用命令



一个开源的应用容器引擎

Docker如何解决大型项目依赖关系复杂,不同组件依赖的兼容性问题?

  • Docker允许开发中将应用、依赖、函数库、配置一起打包,形成可移植镜像

  • Docker应用运行在容器中,使用沙箱机制,相互隔离

Docker如何解决开发、测试、生产环境有差异的问题?

  • Docker镜像中包含完整运行环境,包括系统函数库,仅依赖系统的Linux内核,因此可以在任意Linux操作系统上运行

Docker是一个快速交付应用、运行应用的技术,具备下列优势:

  • 可以将程序及其依赖、运行环境一起打包为一个镜像,可以迁移到任意Linux操作系统

  • 运行时利用沙箱机制形成隔离容器,各个应用互不干扰

  • 启动、移除都可以通过一行命令完成,方便快捷

docker和虚拟机的差异:

        docker是一个系统进程     体积小、启动速度快、性能好

        虚拟机是操作系统中的操作系统   体积大、速度慢  性能一般

 

镜像:理解为软件的安装包

容器:通过镜像进行创建,运行起来就是容器,一个容器可以看作是一个进程 。一个镜像可以创建多个容器

 

docker架构(C/S):

        client  --->  发送命令或者请求到Docker服务端  负责与主机中存在的守护进程通讯

        server --->  主机中存在一个守护进程   负责管理docker中的对象

常见的对象:镜像、容器、数据卷、网络

获取镜像:1.自己构建

                2.获取镜像仓库(Docker Registry)中的镜像

安装相关命令:

systemctl start docker  # 启动docker服务

systemctl stop docker  # 停止docker服务

systemctl restart docker  # 重启docker服务

systemctl status docker  #查看docker状态

docker  info  #查看配置

docker -v  #查看版本

docker  -help  #查看命令

基本操作

  • 镜像

 

镜像名称:[repository]:[tag]     没有指定tag时,默认是latest,代表最新版本的镜像

镜像命令:通过docker   -help 命令查看 各种命令的使用  

        docker  images   查看镜像列表

        docker  save   生成tar包

        docker  pull   拉取镜像

        docker  rmi   删除指定镜像

        docker  load   将tar包还原成镜像

        docker  push   将本地镜像推送到远程仓库

  • 容器

 

容器相关命令:  docker   run   创建容器并运行

容器时隔离环境   需要指定端口映射 --- 宿主机和容器内进程端口的对应关系

docker  run  --name  容器的名称  -p  宿主机的端口:容器内进程的端口  -d(后台运行)镜像名称

    docker   exec   -it mn bash  进入到docker容器中

        mn: 容器名称

        -it:   给当前进入的容器创建一个标准输入、输出终端,允许我们与容器交互

        bash:进入容器后执行的命令,bash是一个linux终端交互命令

 

   docker   logs     查看容器的运行日志       -f   持续查看日志

   docker   rm        删除指定容器     -f   可以删除运行中的容器

   docker   ps        查看运行状态容器信息    -a  查看所有状态的容器

  • 数据卷 

  • ---就是一个虚拟目录,这个目录会对应宿主机上面的某个目录

将容器与数据分离,解耦合,方便操作容器内数据,保证数据安全

相关命令:docker  volume  create

        docker  volume  ls                  #列出所有的数据卷

        docker  volume  inspect       #查看数据卷详情信息

        docker  volume   prune         #删除没有使用到的数据卷

挂载数据卷:

-v  数据卷名称(自定义):容器目录

如果容器运行时数据卷不存在  会自动被创建出来

 

数据卷挂载与目录直接挂载:

数据卷挂载耦合度低  由docker来管理目录   但是目录不好找

目录挂载耦合度高     需要我们自己管理    目录容易查找

  • Dokerfile自定义镜像:

        dokerfile的本质是一个文件,通过指令描述镜像的构建过程,文件第一行必须是FROM,从一个基础镜像来构建,基础镜像可以是基本操作系统或是其他制作好的镜像。

      

        镜像结构 ---是一个分层结构 ,每一层称为一个Layer

        BaseImage层基础镜像:包含基本的系统函数库、环境变量、文件系统

        Entrypoint:入口,镜像中应用启动的命令

         分层是为了基本数据的复用:

docker build -t 镜像名称:镜像版本 -f /root/Dockerfile  .

  • Docker-Compose  

  • ---基于compose文件  批量操作容器
  • 一份标准配置文件应该包含 version、services、networks 三大部分,其中最关键的就是 services 和 networks 两个部分。

    1.version:docker-compose 文件版本,可在https://docs.docker.com/compose/compose-file/compose-versioning/ 查看docker-compose文件版本支持特定的 Docker 版本。

    2.services:服务名称,自定义。

    3.networks:定义网络。实现了网络隔离

微服务部署为docker容器   容器之间不是通过ip地址互联  而是通过容器名

#启动

docker-compose -f /data/docker-compose/docker-compose.yml up -d

#ps:列出所有运行容器

docker-compose ps

#logs:查看服务日志输出

docker-compose logs

#build:构建或者重新构建服务

docker-compose build

#start:启动指定服务已存在的容器

docker-compose start docker-compose-demo

#stop:停止已运行的服务的容器

docker-compose stop docker-compose-demo

#rm:删除指定服务的容器

docker-compose rm docker-compose-demo

#up:构建、启动容器

docker-compose up

#-d:后台运行 docker-compose up -d

#stop:停止容器

docker-compose stop

version : '2'                                      #compose文件版本支持特定的Docker版本
services:
  inabacus: #服务名,自定义
    container_name: inabacus  #容器名
    build:                                          #基于Dockerfile文件构建镜像时使用的属性
      context: .                                    #代表当前目录,也可以指定绝对路径[/path/test/Dockerfile]或相对路径[../test/Dockerfile],尽量放在当前目录,便于管理
      dockerfile: Dockerfile                        #指定Dockerfile文件名
    ports:
      - 8848:8848
      - 1884:1884                                   #指定宿主机端口映射到本容器的端口
    volumes:
      - ./data/inabacus/static/upload:/application/static/upload  # 持久化上传的文件
      - ./data/inabacus/data/protocols:/application/data/protocols"
    restart: always                                #是否随docker服务启动重启
    networks: #加入指定网络
      - my-network                                 #自定义的网络名
    environment: #设置容器的环境变量
      - TZ=Asia/Shanghai
  redis:
      image: redis
      container_name: redis
      ports:
        - "6379:6379"
      volumes:
        - ./data/redis:/data
      restart: always
      networks:
          - my-network
  elasticsearch:
      image: elasticsearch:6.8.11
      container_name: elasticsearch
      environment:
        ES_JAVA_OPTS: -Djava.net.preferIPv4Stack=true -Xms512m -Xmx512m
        transport.host: 0.0.0.0
        discovery.type: single-node
        bootstrap.memory_lock: "true"
        discovery.zen.minimum_master_nodes: 1
        discovery.zen.ping.unicast.hosts: elasticsearch
      volumes:
        - ./data/elasticsearch:/usr/share/elasticsearch/data
      ports:
        - "9200:9200"
        - "9300:9300"
      restart: always
      networks:
        - my-network
  kibana:
      image: kibana:6.8.11
      container_name: kibana
      environment:
        ELASTICSEARCH_URL: http://elasticsearch:9200
      links:
        - elasticsearch:elasticsearch
      ports:
        - "5601:5601"
      depends_on:
        - elasticsearch
      restart: always
      networks:
        - my-network

networks:
  my-network:
  • Docker搭建私有镜像仓库

搭建镜像仓库可以基于Docker官方提供的DockerRegistry来实现。

使用DockerCompose部署带有图象界面的DockerRegistry。

我们的私服采用的是http协议,默认不被Docker信任,所以需要做一个配置

推送、拉取镜像:

        推送镜像到私有镜像服务必须先tag 

        docker push

        docker pull

可视化工具(Portainer)

一个可视化的容器镜像的图形管理工具,利用Portainer可以轻松构建、管理和维护Docker环境。

        

常用命令

docker  run  --name  容器的名称  -p  宿主机的端口:容器内进程的端口   -d(后台运行)镜像名称

docker   exec   -it 容器名  /bin/bash              进入到docker容器中

docker   logs   -f  --tail  100   容器名    查看容器的运行日志       -f   持续查看日志

docker   rm        删除指定容器     -f   可以删除运行中的容器

docker   ps         查看运行状态容器信息    -a  查看所有状态的容器

docker stats --no-stream            容器状态及占用内存大小

docker info      查看docker所有信息

docker build -t 镜像名称:版本号 .

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'  容器名称    查看容器内部ip

docker cp elasticsearch:/usr/share/elasticsearch/data/nodes  /root/data   拷贝容器目录到宿主机目录

docker commit -a "zhang" -m "create new img" 容器ID    inabacus-web:1.0   将当前容器制作成镜像

-a

指定新镜像作者

-c

使用 Dockerfile 指令来创建镜像

-m

提交生成镜像的说明信息

-p

在 commit 时,将容器暂停

docker save 镜像名称:版本号 -o 文件名称.tar

docker load -i /root/image.tar

docker-compose -h                           # 查看帮助

docker-compose up                           # 启动所有docker-compose服务

docker-compose down                         # 停止并删除容器、网络、卷、镜像

docker-compose logs  yml里面的服务id          # 查看容器输出日志

docker-compose config                       # 检查配置

docker-compose config -q                    # 检查配置,有问题才有输出

docker-compose restart                      # 重启服务

docker-compose start                        # 启动服务

docker-compose stop                         # 停止服务

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐