认识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

Docker安装

我们一般使用的是ce(社区版)版本,部分企业使用ee(企业版)版本,这里学习的也是ce版本,和ee版本差不多!

国内推荐使用清华源

~]# 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 注册账号
注册页面.png
第二步:创建项目
然后登录到docker,点击下图创建一个项目
create.png
create1.png
create3.png
这样项目就创建好了
第三步: 登录docker


~]# docker login
    username: beijixs
    password: 

第四步: 修改标签


~]# docker tag busybox:latest beijixs/busybox:v0.1-1

第五步:推送镜像


~]# docker push beijixs/busybox:v0.1-1
最后修改:2020 年 07 月 24 日 01 : 40 PM
如果觉得我的文章对你有用,请随意赞赏