Docker安装

Docker三剑客介绍

官方定义1:Docker是一个开源的应用容器引擎,开发者可以打包他们的应用及依赖到一个可移植的容器中,发布到流行的Linux机器上,也可实现虚拟化。

官方定义2:k8s是一个开源的容器集群管理系统,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。

传统的虚拟技术,在将物理硬件虚拟成多套硬件后,需要再每套硬件上都部署一个操作系统,接着在这些操作系统上运行相应的应用程序。而Docker容器内的应用程序进程直接运行在宿主机(真实物理机)的内核上,Docker引擎将一些各自独立的应用程序和它们各自的依赖打包,相互独立直接运行于未经虚拟化的宿主机硬件上,同时各个容器也没有自己的内核,显然比传统虚拟机更轻便。

每个集群有多个节点,每个节点可创建多个容器,kuberbete就是管理这些应用程序所在的小运行环境(container)而生。

 

docker-machine是解决docker运行环境问题。docker技术是基于Linux内核的cgroup技术实现的,那么问题来了,如果在非Linux平台上使用docker技术需要依赖安装Linux系统的虚拟机。docker-machine就是docker公司官方提出的,用于在各种平台上快速创建具有docker服务的虚拟机的技术。你可以把它理解为virtualbox或者vmware,最开始在win7上用得比较多,但是win10开始自带了hyper-v虚拟机,已经不再需要docker-machine了,docker可以直接运行在安装了Linux系统得hyper-v上。

dcoker-compose主要是解决本地docker容器编排问题。一般是通过yaml配置文件来使用它,这个yaml文件里能记录多个容器启动的配置信息(镜像、启动命令、端口映射等),最后只需要执行docker-compose对应的命令就会像执行脚本一样地批量创建和销毁容器。

docker-swarm是解决多主机多个容器调度部署得问题。swarm是基于docker平台实现的集群技术,他可以通过几条简单的指令快速的创建一个docker集群,接着在集群的共享网络上部署应用,最终实现分布式的服务。swarm技术相当不成熟,很多配置功能都无法实现,只能说是个半成品,目前更多的是使用Kubernetes来管理集群和调度容器。

总结:如果你是在非Linux环境下考虑使用docker-compose,当然我更推荐使用hyper-v或者virtualbox。如果你需要同时操作多个容器,或者希望使用配置文件记录容器启动命令参数,那么推荐使用docker-compose。如果你需要在多台主机上部署docker容器,并对其进行调度,那么swarm是一种选择,当然更推荐Kubernetes。

 

Docker-Compose 是用来管理你的容器的,有点像一个容器的管家,想象一下当你的Docker中有成百上千的容器需要启动,如果一个一个的启动那得多费时间。有了Docker-Compose你只需要编写一个文件,在这个文件里面声明好要启动的容器,配置一些参数,执行一下这个文件,Docker就会按照你声明的配置去把所有的容器启动起来,但是Docker-Compose只能管理当前主机上的Docker,也就是说不能去启动其他主机上的Docker容器

Docker Swarm 是一款用来管理多主机上的Docker容器的工具,可以负责帮你启动容器,监控容器状态,如果容器的状态不正常它会帮你重新帮你启动一个新的容器,来提供服务,同时也提供服务之间的负载均衡,而这些东西Docker-Compose 是做不到的

Kubernetes它本身的角色定位是和Docker Swarm 是一样的,也就是说他们负责的工作在容器领域来说是相同的部分,当然也有自己一些不一样的特点。这个就像是Eclipse和IDEA一样,也是一个跨主机的容器管理平台。它是谷歌公司根据自身多年运维经验研发一款容器管理平台。而Docker Swarm则是由Docker 公司研发的。

既然这两个东西是一样的,那就面临选择的问题,应该学习哪一个技术呢?实际上这两年Kubernetes已经成为了很多大公司的默认使用的容器管理技术,而Docker Swarm已经在这场与Kubernetes竞争中已经逐渐失势,如今容器管理领域已经开始已经逐渐被Kubernetes一统天下了。所以建议大家学习的时候,应该多考虑一下这门技术在行业里面是不是有很多人在使用。需要注意的是,虽然Docker Swarm在与Kubernetes的竞争中败下阵来,但是这个跟Docker这个容器引擎没有太大关系,它还是整个容器领域技术的基石,Kubernetes离开他什么也不是。

总结Docker是容器技术的核心、基础,Docker Compose是一个基于Docker的单主机容器编排工具,功能并不像Docker Swarm和Kubernetes是基于Dcoker的跨主机的容器管理平台那么丰富。

Docker环境安装

安装yum-utils:

yum install -y yum-utils

安装依赖

yum install -y device-mapper-persistent-data lvm2

##yum install -y device-mapper-persistent-data lvm2 net-tools vim lrzsz tree screen lsof tcpdump wget ntpdate

 

为yum源添加docker仓库位置:

yum repolist

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

 

安装docker:

yum install -y docker-ce

 

启动docker:

systemctl start docker

 

Docker镜像常用命令

搜索镜像

docker search java

下载镜像

docker pull java:8

 

如何查找镜像支持的版本

由于docker search命令只能查找出是否有该镜像,不能找到该镜像支持的版本,所以我们需要通过docker hub来搜索支持的版本。

进入docker hub的官网,地址:https://hub.docker.com

然后搜索需要的镜像:

查看镜像支持的版本:

 

进行镜像的下载操作:

docker pull nginx:1.17.0

 

列出镜像

docker images

 

删除镜像

指定名称删除镜像

docker rmi java:8

 

指定名称删除镜像(强制)

docker rmi -f java:8

 

删除所有没有引用的镜像

docker rmi `docker images | grep none | awk '{print $3}'`

 

强制删除所有镜像

docker rmi -f $(docker images)

 

Docker容器常用命令

新建并启动容器

docker run -p 80:80 --name nginx -d nginx:1.17.0

-d选项:表示后台运行

--name选项:指定运行后容器的名字为nginx,之后可以通过名字来操作容器

-p选项:指定端口映射,格式为:hostPort:containerPort

 

列出容器

列出运行中的容器:

docker ps

 

列出所有容器

docker ps -a

 

停止容器

# $ContainerName及$ContainerId可以用docker ps命令查询出来

docker stop $ContainerName(或者$ContainerId)

比如:

docker stop nginx

#或者

docker stop c5f5d5125587

 

强制停止容器

docker kill $ContainerName(或者$ContainerId)

 

启动已停止的容器

docker start $ContainerName(或者$ContainerId)

 

进入容器

先查询出容器的pid:

docker inspect --format "{{.State.Pid}}" $ContainerName(或者$ContainerId)

根据容器的pid进入容器:

nsenter --target "$pid" --mount --uts --ipc --net --pid

 

删除容器

删除指定容器:

docker rm $ContainerName(或者$ContainerId)

 

按名称删除容器

docker rm `docker ps -a | grep mall-* | awk '{print $1}'`

 

强制删除所有容器;

docker rm -f $(docker ps -a -q)

 

查看容器的日志

查看当前全部日志

docker logs $ContainerName(或者$ContainerId)

 

动态查看日志

docker logs $ContainerName(或者$ContainerId) -f

 

查看容器的IP地址

docker inspect --format '{{ .NetworkSettings.IPAddress }}' $ContainerName(或者$ContainerId)

 

修改容器的启动方式

docker container update --restart=always $ContainerName

 

同步宿主机时间到容器

docker cp /etc/localtime $ContainerName(或者$ContainerId):/etc/

 

指定容器时区

docker run -p 80:80 --name nginx \

-e TZ="Asia/Shanghai" \

-d nginx:1.17.0

 

在宿主机查看docker使用cpu、内存、网络、io情况

查看指定容器情况:

docker stats $ContainerName(或者$ContainerId)

 

查看所有容器情况:

docker stats -a

 

查看Docker磁盘使用情况

docker system df

 

进入Docker容器内部的bash

docker exec -it $ContainerName /bin/bash

 

使用root帐号进入Docker容器内部

docker exec -it --user root $ContainerName /bin/bash

 

Docker创建外部网络

docker network create -d bridge my-bridge-network

 

修改Docker镜像的存放位置

查看Docker镜像的存放位置:

docker info | grep "Docker Root Dir"

 

关闭Docker服务:

systemctl stop docker

 

移动目录到目标路径:

mv /var/lib/docker /mydata/docker

 

建立软连接:

ln -s /mydata/docker /var/lib/docker

 

Docker-compose环境安装

下载Docker Compose

curl -L https://get.daocloud.io/docker/compose/releases/download/1.24.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

 

修改该文件的权限为可执行

chmod +x /usr/local/bin/docker-compose

 

查看是否已经安装成功

docker-compose –version

 

使用Docker Compose的步骤

使用Dockerfile定义应用程序环境,一般需要修改初始镜像行为时才需要使用;

使用docker-compose.yml定义需要部署的应用程序服务,以便执行脚本一次性部署;

使用docker-compose up命令将所有应用服务一次性部署起来。

 

Docker-compose常用命令

image

指定运行的镜像名称

#运行的是mysql5.7的镜像

image: mysql:5.7

 

container_name

配置容器名称

#容器名称为mysql

container_name: mysql

 

ports

指定宿主机和容器的端口映射(HOST:CONTAINER)

#将宿主机的3306端口映射到容器的3306端口

ports:

  - 3306:3306

 

volumes

将宿主机的文件或目录挂载到容器中(HOST:CONTAINER)

#将外部文件挂载到myql容器中

volumes:

  - /mydata/mysql/log:/var/log/mysql

  - /mydata/mysql/data:/var/lib/mysql

  - /mydata/mysql/conf:/etc/mysql

 

environment

配置环境变量

#设置mysqlroot帐号密码的环境变量

environment:

  - MYSQL_ROOT_PASSWORD=root

 

links

连接其他容器的服务(SERVICE:ALIAS)

#可以以database为域名访问服务名称为db的容器

links:

  - db:database

Docker compose常用命令

构建、创建、启动相关容器

# -d表示在后台运行

docker-compose up -d

 

指定文件启动

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

 

停止所有相关容器

docker-compose stop

 

列出所有容器信息

docker-compose ps

 

使用Docker Compose 部署应用

编写docker-compose.yml文件

Docker Compose将所管理的容器分为三层,工程、服务及容器。docker-compose.yml中定义所有服务组成了一个工程,services节点下即为服务,服务之下为容器。容器与容器直之间可以以服务名称为域名进行访问,比如在mall-tiny-docker-compose服务中可以通过jdbc //db:3306这个地址来访问db这个mysql服务。

version: '3'

services:

  # 指定服务名称

  db:

    # 指定服务使用的镜像

    image: mysql:5.7

    # 指定容器名称

    container_name: mysql

    # 指定服务运行的端口

    ports:

      - 3306:3306

    # 指定容器中需要挂载的文件

    volumes:

      - /mydata/mysql/log:/var/log/mysql

      - /mydata/mysql/data:/var/lib/mysql

      - /mydata/mysql/conf:/etc/mysql

    # 指定容器的环境变量

    environment:

      - MYSQL_ROOT_PASSWORD=root

  # 指定服务名称

  mall-tiny-docker-compose:

    # 指定服务使用的镜像

    image: mall-tiny/mall-tiny-docker-compose:0.0.1-SNAPSHOT

    # 指定容器名称

    container_name: mall-tiny-docker-compose

    # 指定服务运行的端口

    ports:

      - 8080:8080

    # 指定容器中需要挂载的文件

    volumes:

      - /etc/localtime:/etc/localtime

      - /mydata/app/mall-tiny-docker-compose/logs:/var/logs

注意:如果遇到mall-tiny-docker-compose服务无法连接到mysql,需要在mysql中建立mall数据库,同时导入mall.sql脚本。具体参考使用Dockerfile为SpringBoot应用构建Docker镜像中的运行mysql服务并设置部分。

 

使用maven插件构建mall-tiny-docker-compose镜像

注意:构建有问题的可以参考使用Maven插件为SpringBoot应用构建Docker镜像

 

运行Docker Compose命令启动所有服务

先将docker-compose.yml上传至Linux服务器,再在当前目录下运行如下命令:

docker-compose up -d

访问接口文档地址http://192.168.3.101:8080/swagger-ui.html:

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值