Docker-最好的平台

Docker基础

什么是docker
标准化软件单元,将软件打包到标准化单元中,以进行开发和部署。
Docker是开发,运行和部署应用程序的开放管理平台
开发人员能利用docker 开发和运行应用程序
运维人员能利用docker 部署和管理应用程序
为什么使用docker
开发人员通过Docker将他们的想法变为现实
保证程序运行环境的一致性;
降低配置开发环境、生产环境的复杂度和成本;
实现程序的快速部署和分发。

docker安装

官网参考:https://docs.docker.com/engine/install/ubuntu/

ubuntu版本:
# step 1: 安装必要的一些系统工具
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
step 2: 安装GPG证书
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
Step 3: 写入软件源信息
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
Step 4: 更新并安装Docker-CE
sudo apt-get -y update
sudo apt-get -y install docker-ce	
安装指定版本的Docker-CE:
Step 1: 查找Docker-CE的版本:
apt-cache madison docker-ce
docker-ce | 17.03.1~ce-0~ubuntu-xenial | http://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
docker-ce | 17.03.0~ce-0~ubuntu-xenial | http://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
Step 2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.1~ce-0~ubuntu-xenial)
sudo apt-get -y install docker-ce=[VERSION]
查看安装版本:docker-version
docker的卸载
删除某软件,及其安装时自动安装的所有包
sudo apt-get autoremove docker docker-ce docker-engine  docker.io  containerd runc
dpkg -l | grep docker
卸载没有删除的docker相关插件(结合自己电脑的实际情况)
sudo apt-get autoremove docker-ce-*
删除docker的相关配置&目录
sudo rm -rf /etc/systemd/system/docker.service.d
sudo rm -rf /var/lib/docker
确定docker卸载完毕
sudo docker -v

Docker 结构了解(C/S)

在这里插入图片描述

docker 核心技术

镜像、容器、网络管理、数据卷、仓库、Dockerfile、Docker-compose

镜像(docker image)
镜像是一个Docker的可执行文件,其中包括运行应用程序所需的所有代码内容、依赖库、环境变量和配置文件等。
通过镜像可以创建一个或多个容器。
常用命令:
    docker search:搜索Docker Hub(镜像仓库)上的镜像  
    如:docker search  mysql
    docker images/docker image ls :  列出本地镜像
    docker pull: 下载仓库中的镜像 
    如:docker pull centos
    docker rmi/docker image rm: 将本地的一个或多个镜像删除
    docker save: 将本地的一个或多个镜像打包保存成本地tar文件(输出到STDOUT)
    如:docker save -o test.tar image1 image2       -o 指定写入文件名和路径
    docker load: 将save命令打包的镜像导入本地镜像库中
    如:docker load -i test.tar      -i  指定要打入的文件
    docker image inspect/docker inspect:查看本地一个或多个镜像的详细信息

在这里插入图片描述

容器(docker container)
容器(Container):容器是一种轻量级、可移植、并将应用程序进行的打包的技术,使应用程序可以在几乎任何地方以相同的方式运行
Docker将镜像文件运行起来后,产生的对象就是容器。容器相当于是镜像运行起来的一个实例。
容器具备一定的生命周期。
另外,可以借助docker ps命令查看运行的容器,如同在linux上利用ps命令查看运行着的进程那样。
容器与虚拟机
相同点
	容器和虚拟机一样,都会对物理硬件资源进行共享使用。
	容器和虚拟机的生命周期比较相似(创建、运行、暂停、关闭等等)。
	容器中或虚拟机中都可以安装各种应用,如redis、mysql、nginx等。也就是说,在容器中的操作,如同在一个虚拟机(操作系统)中操作一样。
	同虚拟机一样,容器创建后,会存储在宿主机上:linux上位于/var/lib/docker/containers下
不同点
    注意:容器并不是虚拟机,但它们有很多相似的地方
	虚拟机的创建、启动和关闭都是基于一个完整的操作系统。一个虚拟机就是一个完整的操作系统。而容器直接运行在宿主机的内核上,其本质上以一系列进程的结合。
	容器是轻量级的,虚拟机是重量级的。首先容器不需要额外的资源来管理(不需要Hypervisor、Guest OS),虚拟机额外更多的性能消耗;其次创建、启动或关闭容器,如同创建、启动或者关闭进程那么轻松,而创建、启动、关闭一个操作系统就没那么方便了。
	也因此,意味着在给定的硬件上能运行更多数量的容器,甚至可以直接把Docker运行在虚拟机上。
Docker生命周期

在这里插入图片描述
常用命令:

  docker run:利用镜像创建并启动一个容器
        命令格式: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
   参数:
        -t, --tty             分配一个伪TTY,也就是分配虚拟终端
        -i, --interactive      即使没有连接,也要保持STDIN打开
        --name            为容器起名,如果没有指定将会随机产生一个名称
        -d, --detach  在后台运行容器并打印出容器ID
        --rm  当容器退出运行后,自动删除容器
    docker ps  -a 查看所有容器
    docker run centos ps -a
    docker run -it  centos  python
    docker run -dit  centos  python
    注意:如果不希望容器马上退出,需要接一个能阻塞一直运行的命令,或者镜像中有守护进程程序

    docker stop:关闭一个或多个处于暂停状态或者运行状态的容器
    docker restart:重启一个或多个处于运行状态、暂停状态、关闭状态或者新建状态的容器
      该命令相当于stop和start命令的结合
    docker container rm/docker rm:删除一个或多个容器
    docker container inspect/docker inspect:查看本地一个或多个容器的详细信息
    docker logs: 查看容器的日志信息 -f, --follow           动态跟踪显示日志信息
    
    docker exec:在容器中运行一个命令
    命令:docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
    参数(OPTIONS): 
      -d, --detach                 后台运行命令
      -i, --interactive  即使没连接容器,也将当前的STDIN绑定上
      -t, --tty                    分配一个虚拟终端
容器与镜像

在这里插入图片描述
常用命令:

docker commit:根据容器生成一个新的镜像
命令格式:
  docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
命令参数(OPTIONS):
  -a, --author string      作者
  -m, --message string     提交信息,类似git commit -m
  -p, --pause              提交时暂停容器 (default true)
docker export:将容器当前的文件系统导出成一个tar文件    -o,      指定写入的文件
docker import:从一个tar文件中导入内容创建一个镜像  
docker commit 产生的镜像会保留历史层信息,docker export和docker import 产生的镜像没有历史层信息是一个全新的镜像
网络(docker network)
容器的网络默认与宿主机、与其他容器都是相互隔离。
容器中可以运行一些网络应用(如nginx、web应用、数据库等),如果要让外部也可以访问这些容器内运行的网络应用,那么就需要配置网络来实现。
Docker有五种网络驱动模式
bridge network 模式(网桥):默认的网络模式。类似虚拟机的nat模式
host network 模式(主机):容器与宿主机之间的网络无隔离,即容器直接使用宿主机网络
None network 模式:容器禁用所有网络。
Overlay network 模式(覆盖网络): 利用VXLAN实现的bridge模式
Macvlan network 模式:容器具备Mac地址,使其显示为网络上的物理设备
bridge模式介绍
特点:
宿主机上需要单独的bridge网卡,如默认docker默认创建的docker0。
容器之间、容器与主机之间的网络通信,是借助为每一个容器生成的一对veth pair虚拟网络设备对,进行通信的。一个在容器上,另一个在宿主机上。
每创建一个基于bridge网络的容器,都会自动在宿主机上创建一个veth**虚拟网络设备。
外部无法直接访问容器。需要建立端口映射才能访问。
容器借由veth虚拟设备通过如docker0这种bridge网络设备进行通信。
每一容器具有单独的IP
        端口映射:
            启动的容器时,为容器进行端口映射
        命令格式:
        	docker run/create -P …
              或者 docker run/create –p …
        命令参数(OPTIONS):
        	-P, --publish-all		将容器内部所有暴露端口进行随机映射
        	-p, --publish list 	手动指定端口映射
        注意:
        	-p [HOST_IP]:[HOST_PORT]:CONTAINER_PORT
        	如:-p ::80		将容器的80端口随机(端口)映射到宿主机任意IP
        	       -p :8000:6379 	将容器的6379端口映射到宿主机任意IP的8000端口
        	       -p 192.168.5.1::3306	将容器的3306端口随机(端口)映射到宿主机的192.168.5.1IP上
    
        docker network ls:查看已经建立的网络对象
        docker network create:创建新的网络对象
        docker network inspect:查看一个或多个网络的详细信息
        docker run --network 为启动的容器指定网络模式 
            如:docker run/create --network NETWORK
host 网络模式(网络性能最优)
特点:
	容器完全共享宿主机的网络。网络没有隔离。宿主机的网络就是容器的网络。
	容器、主机上的应用所使用的端口不能重复。例如:如果宿主机已经占用了8090端口,那么任何一个host模式的容器都不可以使用8090端口了;反之同理。
	外部可以直接访问容器,不需要端口映射。
	容器的IP就是宿主机的IP
数据卷
数据卷为什么存在
	宿主机无法直接访问容器中的文件
	容器中的文件没有持久化,导致容器删除后,文件数据也随之消失
	容器之间也无法直接访问互相的文件
	为解决这些问题,docker加入了数据卷(volumes)机制,能很好解决上面问题,以实现:
	容器与主机之间、容器与容器之间共享文件
	容器中数据的持久化
	将容器中的数据备份、迁移、恢复等
特点
	数据卷存在于宿主机的文件系统中,独立于容器,和容器的生命周期是分离的。
	数据卷可以目录也可以是文件,容器可以利用数据卷与宿主机进行数据共享,实现了容器间的数据共享和交换。
	容器启动初始化时,如果容器使用的镜像包含了数据,这些数据会拷贝到数据卷中。
	容器对数据卷的修改是实时进行的。
	数据卷的变化不会影响镜像的更新。数据卷是独立于联合文件系统,镜像是基于联合文件系统。镜像与数据卷之间不会有相互影响。

在这里插入图片描述

bind mounts方式挂载数据卷
利用docker run/create的参数为容器挂载数据卷
用法:
  方式一: -v, --volume参数
        -v 宿主机文件或文件夹路径:容器中的文件或者文件夹路径   (绝对路径)
  方式二:--mount参数
       --mount type=bind, src=宿主机文件或文件夹路径, dst=容器中的文件或者文件夹路径
       注意:src指定的文件和路径必须提前创建或存在  
docker run -dit  -v /root/volume_dir:/root/a_dir centos
docker exec 容器id  touch  /root/a_dir/111.txt
ls /root/volume_dir
volumes方式挂载数据卷
利用docker run/create为容器挂载数据卷
用法:
  方式一: -v, --volume参数
        -v VOLUME-NAME:容器中的文件或者文件夹路径
  方式二:--mount 参数
  --mount type=volume, src=VOLUME-NAME, dst=容器中的文件或者文件夹路径

  docker volume create  创建数据卷对象
  docker volume inspect  查看数据卷详细信息
  docker volume ls  查看已创建的数据卷对象
  docker volume prune  删除未被使用的数据卷对象
  docker volume rm  删除一个或多个数据卷对象
  
Docker的数据卷更多会是使用volumes方式来进行使用。使用时需注意:
	如果挂载一个空的数据卷到容器中的一个非空目录中,那么这个目录下的文件会被复制到数据卷中。
	如果挂载一个非空的数据卷到容器中的一个目录中,那么容器中的目录中会显示数据卷中的数据。如果原来容器中的目录中有数据,那么这些原始数据会被隐藏掉。
	这两个规则都非常重要,灵活利用第一个规则可以帮助我们初始化数据卷中的内容。掌握第二个规则可以保证挂载数据卷后的数据总是你期望的结果。
Dockerfile

官网:https://github.com/docker-library/docs
利用docker build命令依次执行在Dockerfile中定义的一系列命令,最终生成一个新的镜像(定制镜像)

命令参考:
FROM: 指定基础镜像
RUN: 构建镜像过程中需要执行的命令。可以有多条。docker build
CMD:添加启动容器时需要执行的命令。多条只有最后一条生效。可以在启动容器时被覆盖和修改。
ENTRYPOINT:同CMD,但这个一定会被执行,不会被覆盖修改。
MLABELAINTAINER:表明镜像的作者。将被遗弃,被LABEL代替。
EXPOSE:设置对外暴露的端口。
ENV:设置执行命令时的环境变量,并且在构建完成后,仍然生效
ARG:设置只在构建过程中使用的环境变量,构建完成后,将消失
ADD:将本地文件或目录拷贝到镜像的文件系统中。能解压特定格式文件,能将URL作为要拷贝的文件
COPY:将本地文件或目录拷贝到镜像的文件系统中。
VOLUME:添加数据卷
USER:指定以哪个用户的名义执行RUN, CMD 和ENTRYPOINT等命令
WORKDIR:设置工作目录
Docker compose

Docker Compose是一个能一次性定义和管理多个Docker容器的工具。

详细地说:
  Compose中定义和启动的每一个容器都相当于一个服务(service)
  Compose中能定义和启动多个服务,且它们之间通常具有协同关系
管理方式:
  使用YAML文件来配置我们应用程序的服务。
  使用单个命令(docker-compose up),就可以创建并启动配置文件中配置的所有服务。
docker常见命令集合
打包一个或多个镜像
docker save

将save命令打包的镜像导入本地镜像库中
docker load -i

根据容器生成一个新的镜像
docker commit

搜索镜像
docker search 镜像名称

下载镜像
docker pull 镜像

查看已安装镜像列表
docker images

删除镜像
docker rmi 镜像id

运行镜像生成新的容器
docker run -d -it 镜像名称:版本号
eg: docker run -d -it -p 3306:33306 mysql:5.7
-p 端口映射,前者宿主机端口,后者容器端口,多个端口 
-d 后台运行容器
-it 以交互模式运行容器 
eg: docker run -d -it -p 8000:8008 --name test -v /opt:/opt test:2.0
-v 数据挂载

进入容器
docker exec -it 容器id /bin/bash

容器的启动停止
docker start 容器id
docker stop 容器id

删除容器
docker rm 容器id

查看容器日志
docker logs 容器id -f

docker外挂到一个文件夹
docker run -v
比如说
docker run  -v /usr/appdata:/code -d -p 8008:8006 -it test:2.0 python3 test.py
命令解析:
-v 本地目录:容器目录。挂载主机的本地目录 /usr/appdata 目录到容器的/code 目录,本地目录的路径必须是绝对路径
-d 后台运行容器
-p 8008:8006指定主机的8008端口映射到容器的8006端口
-it  test:2.0 以交互模式运行test:2.0启动的容器
python3 test.py 启动test.py文件,这样可以不需要再Dockfile中指定 CMD命令,或者覆盖Dockfile中的CMD命令。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值