认识Docker
Docker 是一个开放源代码软件,是一个开放平台,用于开发应用、交付(shipping)应用、运行应用。 Docker允许用户将基础设施(Infrastructure)中的应用单独分割出来,形成更小的颗粒(容器),从而提高交付软件的速度。
Docker容器 与虚拟机类似,但原理上,容器是将操作系统层虚拟化,虚拟机则是虚拟化硬件,因此容器更具有便携性、高效地利用服务器。 容器更多的用于表示 软件的一个标准化单元。由于容器的标准化,因此它可以无视基础设施(Infrastructure)的差异,部署到任何一个地方。另外,Docker也为容器提供更强的业界的隔离兼容。
Docker 利用Linux核心中的资源分离机制,例如cgroups,以及Linux核心名字空间(namespaces),来创建独立的容器(containers)。这可以在单一Linux实体下运作,避免引导一个虚拟机造成的额外负担[3]。Linux核心对名字空间的支持完全隔离了工作环境中应用程序的视野,包括行程树、网络、用户ID与挂载文件系统,而核心的cgroup提供资源隔离,包括CPU、存储器、block I/O与网络。从0.9版本起,Dockers在使用抽象虚拟是经由libvirt的LXC与systemd - nspawn提供界面的基础上,开始包括libcontainer库做为以自己的方式开始直接使用由Linux核心提供的虚拟化的设施,依据行业分析公司“451研究”:“Dockers是有能力打包应用程序及其虚拟容器,可以在任何Linux服务器上运行的依赖性工具,这有助于实现灵活性和便携性,应用程序在任何地方都可以运行,无论是公用云、私有云、单机等。”
Docker安装
国内推荐使用清华源
~]# curl https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo -o /etc/yum.repo.d/docker-ce.repo
~]# vim /etc/yum.repo.d/docker-ce.repo
注意:下载下来的源,里面还是指定的官方源,我们需要做以下替换
https://download.docker.com --> https://mirrors.tuna.tsinghua.edu.cn/docker-ce
安装docker:
~]# yum install docker-ce -y
启动:
~]# systemctl start docker
镜像加速
由于docker在国内访问比较慢,于是有以下加速方案
注意:默认配置文件目录是不存在的
~]# mkdir /etc/docker
~]# vim /etc/docker/daemon.json
配置加速地址:
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
可以在数组里面写入多个加速地址,如阿里云的。上面是官方的docker中国加速
Docker基础使用方法
拉取镜像
docker pull NAME:TAR
~]# docker pull nginx:1.14-alpine
alpine标签表示最小的镜像,如果省略标签则默认标签是:latest
运行容器
docker run [OPTIONS] NAME[:TAG] [COMMAND]
~]# docker run --name webserver -it -p :80:80 nginx:1.14-alpine
Options:
- --name NAME 指定名称,后面可以使用名称kill掉容器,而不是id
- -it 以交互式运行 i 交互式 t 分配终端 tty
- -d 后台运行
- --rm 容器结束后自动删除
- -p [IP]:[PORT]:[Docker_Port] 暴露容器的端口,使可通过宿主机ip:port反问docker,IP为空表示绑定到宿主机所有可用IP地址相当于
0.0.0.0
, PORT为空表示绑定到随机端口3000
以上的端口,Docker_Port不能为空 - -P 大写P 绑定Docker端口到宿主机的随机端口,前提是Docker容器在build时有定义需要暴露的端口,否则无效
- -h, --hostname 设置容器的主机名
- -e, --env 设置环境变量
- --net, --network 指定需要使用的网络,默认是: bridge 可选: none(只有lo接口), IMAGES:TAG 表示使用某容器的网络,共享名称空间(NET, IPC, UTS)
- -v, --volume local_path:docker_path 挂载逻辑卷,用于持久化文件 local位宿主机目录,可省,docker_path位容器内的目录
进入正在运行的容器:
docker exec -it NAME|ID COMMAND
~]# docker exec -it webserver /bin/sh
命令为一个sh,才可进入到容器内部
容器网络
容器默认启动使用的是虚拟网桥,我们知道docker的运行方式有以下几种
第一种: 网络为none
, 容器内部只有一个lo接口
第二种: 网络为bridge
, 独立的net, ipc, uts, user, pid, mount
第三种: 共享其他容器的 net, ipc, uts 可以容器间共用一个地址,不同容器的不通进程可以互相通信
第四种: 共享宿主机的名称空间,容器只隔离了 user, pid, mount
查看网络
docker network ls 显示宿主机现在已有网络
NETWORK ID NAME DRIVER SCOPE
f2f28a696d96 bridge bridge local
dc19922a5f59 host host local
54400737638b none null local
默认只有以上网络,分别对应上面的第二种
、第四种
、第一种
我们手动创建一个网络:
docker network Options
~]# docker network create --subnet "172.26.0.0/16" --gateway "172.26.0.1" mybr0
Options:
- --subnet string 设置子网
- --gateway string 设置网关
更多查看帮助
容器使用该网络:
~]# docker run --network mybr0 --rm --name busybox -it busybox:latest /bin/sh
删除我们创建的网络:
~]# dcoker network rm mybr0
容器的停止/终止/启动/删除
停止
~]# docker stop webserver
停止一个名为webserver的容器
启动
~]# docker start webserver
启动一个名为webserver的容器
终止
~]# docker kill webserver
终止webserver
删除
~]# docker rm webserver
镜像管理
查看本地镜像
~]# docker images
拉取镜像
~]# docker pull nginx:latest
查看镜像详细信息
~]# docker inspect nginx:latest
推送镜像到远程仓库
第一步:注册docker账号
到 Docker Hub 注册账号
第二步:创建项目
然后登录到docker,点击下图创建一个项目
这样项目就创建好了
第三步: 登录docker
~]# docker login
username: beijixs
password:
第四步: 修改标签
~]# docker tag busybox:latest beijixs/busybox:v0.1-1
第五步:推送镜像
~]# docker push beijixs/busybox:v0.1-1