Docker基本使用
历史
- 2010 年几个人基于PAAS平台创建的dotCloud。随着云的应用,大公司比如谷歌、微软都涉足。所以dotCloud生死攸关。既无盈利又可惜自己的汗水付诸东流,所以他们选择了开源。开源后就开始了逆袭之路。
- 2014年6月,第一个版本Docker1.0诞生。
- 目前社区版1.29。
概念
- 最开始docker官网(https://www.docker.com/), 最醒目的三个单词即是:build、ship、run
- docker含义: docker衍生于虚拟机,所以,不管是虚拟机还是容器,其实都是对计算机资源隔离的不同实现罢了。包括对文件系统隔离、对网络隔离。docker基于Ubuntu开发,本身技术不是什么新东西,但它制定的隔离使用标准,成功将服务与系统,服务与硬件进行隔离。
- docker架构:docker client + docker daemon + docker repository, 客户端做构建镜像,拉取镜像的指令发出, 宿主机的进程运行容器,仓库和maven仓库的概念类似,主要存放已经构建OK的镜像。
- 镜像:镜像这个词也不是新鲜东西,我们最早接触这个词应该是安装操作系统的时候,系统盘里的.iso文件就是一个系统镜像。镜像其实就是打包好的一个可以运行的程序,和我们windows里面的zip文件类似。要用哪个镜像,直接就从docker的官方仓库(https://hub.docker.com/)去拉取即可。
- 仓库:存放镜像。国内也有很多仓库,阿里的、网易的。
- 容器:运行的镜像即是一个容器。这里联想上面的三个词:build即是构建镜像。ship即是运输镜像。run即是运行镜像成容器。
- 宿主机:即运行docker的主机。
- 隔离:类似虚拟机,docker里面有自己的文件系统,也有隔离的网络,所以宿主机的网络端口0~65535 和docker里面的0~65535是可以独立存在的。
原理
docker本质是运行的进程,和宿主机共享linux内核。那如何做到真正的隔离呢?其实是通过linux的namespace技术,对网络、磁盘、内存的做到细粒度隔离。实际上docker是一个运行在宿主机的进程,和宿主机本身的进程处于平级关系,也都是相互竞争cpu、内存等资源。譬如宿主机PID为333的进程为docker实例,而docker通过namespace技术把docker实例和宿主机分隔开。 但docker又是通过什么做到每个docker实例之间的资源竞争不受影响呢?这就是google公司开源出来的cgroup技术。cgroup作用一句话即是:限制进程对系统资源的使用,不管是空间还是时间上的。
基本使用
配置源
用阿里云的吧,快。在/etc/yum.repos.d/目录下,创建docker.repo的文件:
[docker-ce-stable] name=Docker CE Stable - $basearch baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/stable enabled=1 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-stable-debuginfo] name=Docker CE Stable - Debuginfo $basearch baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/debug-$basearch/stable enabled=0 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-stable-source] name=Docker CE Stable - Sources baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/source/stable enabled=0 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-edge] name=Docker CE Edge - $basearch baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/edge enabled=0 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-edge-debuginfo] name=Docker CE Edge - Debuginfo $basearch baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/debug-$basearch/edge enabled=0 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-edge-source] name=Docker CE Edge - Sources baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/source/edge enabled=0 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-test] name=Docker CE Test - $basearch baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/test enabled=0 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-test-debuginfo] name=Docker CE Test - Debuginfo $basearch baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/debug-$basearch/test enabled=0 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-test-source] name=Docker CE Test - Sources baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/source/test enabled=0 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-nightly] name=Docker CE Nightly - $basearch baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/nightly enabled=0 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-nightly-debuginfo] name=Docker CE Nightly - Debuginfo $basearch baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/debug-$basearch/nightly enabled=0 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-nightly-source] name=Docker CE Nightly - Sources baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/source/nightly enabled=0 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
更新一下源:
yum -y update
安装
docker的linux安装非常简单,一条命令即可。但内核要求3.10以上。
查看可用包列表:
yum list docker-ce --showduplicates | sort -r
安装:
sudo yum install docker-ce-18.03.1.ce-1.el7.centos
- 加入开机启动
systemctl start docker
systemctl enable docker
- 查看镜像
docker images [options] [REPOSITORY[:TAG]]
- 拉取镜像
docker pull [options] NAME[:TAG]
- 运行镜像
docker run [options] IMAGE[:TAG] [COMMAND] [ARG..]
命令这玩意儿死记硬背没用,多用就知道了。一定记住多用--help, 例 docker run --help。
网络模式
- 桥接,默认
- host模式,和宿主机公用。
- none模式。
- container模式。
- 自定义模式。
springboot部署到docker
-
在本地的虚拟机创建一个构建的目录,并把jar包传上来。
2. Dockerfile文件编辑
Dockerfile的元素解释,盗图一张,请阅;
3. 构建build
命令: docker build -t liaoday-gis .
用docker images 查看:
4. 运行
命令: docker run -d -p 8888:8888 d0ebf323acfb
用docker run --help ,这里描述:
-d, --detach Run container in background and print container ID,即-d后台运行。
-p, --publish list Publish a container's port(s) to the host ,即后面容器的端口,映射前面宿主机的端口。
-P, --publish-all Publish all exposed ports to random ports, 即大P暴露容器的随机端口给宿主机。
用docker ps 查看运行的容器:
5. 成功访问
命令
##守护进程重启 sudo systemctl daemon-reload ##重启docker服务 sudo systemctl restart docker ## 关闭docker sudo systemctl stop docker ## 重启docker服务 sudo service docker restart ## 关闭docker sudo service docker stop
参考
https://www.cnblogs.com/kaye/p/10508800.html