Docker入门笔记(一)

江枫思渺然 提交于 2020-04-06 13:37:30

为什么用docker?

一句话总结:平台的伸缩和弹性部署。

  • 开发人员消除协作编码时“在我的机器上可正常工作”的问题(开发环境/测试环境/生产环境部署切换)
  • 运维人员在隔离容器中并行运行和管理应用,获得更好的计算密度

docker是怎么做到的?

docker的两大技术

  1. linux虚拟化

linux操作系统=linux开源内核+文件系统 linux虚拟化=复用内核+自己定制的文件系统

  1. docker镜像技术

docker镜像技术=虚拟化的操作系统+服务包+容器文件=整包(集装箱),也可称作沙箱环境

docker的结构

  • Host,主机 Container,容器,独立运行的一套虚拟化linux系统 Image,镜像,服务组件的镜像文件
  • Registry,镜像仓库
  • Client,客户端,使用api与docker交互
  • Machine,docker的命令行工具

docker 仓库

存放镜像文件的仓库,类似maven仓库的概念。 分为中央仓库和私服仓库。 镜像查找顺序:私服仓库-->中央仓库 官方仓库的命名规则:docker中央仓库可以注册,然后import上传的仓库是在个人的私有仓库中,以用户名/镜像名为格式存储

docker 镜像

docker的可运行镜像是通过一层层的镜像文件包装,再加上最顶层的容器文件组成的。

每一层镜像文件都有一个唯一id,镜像文件在不同的可运行镜像中可复用,可通过docker history nginx,来查看镜像的文件层次信息

下载到本地时,相同的镜像文件也可复用

docker 容器

容器是独立运行的一个或一组应用,以及它们的运行态环境

docker run 创建一个容器并运行一个命令 docker create 创建一个容器,但不启动—>start

-d: 后台运行容器,并返回容器ID;

-i: 以交互模式运行容器,通常与 -t 同时使用;

-p: 端口映射,格式为:主机(宿主)端口:容器端口;

-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;

--name="nginx-lb": 为容器指定一个名称;

--dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;

-m :设置容器使用内存最大值;

--net="bridge": 网络连接类型,支持 bridge/host/none/container: 四种类型;

--link=[X]: 添加链接到另一个容器;

--expose=[X]: 开放一个端口或一组端口;

docker安装

`

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

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

#默认版本安装

yum install docker-ce

#指定版本安装

yum install docker-ce-18.09.9 docker-ce-cli-18.09.9 containerd.io -y

#启动

systemctl start docker systemctl enable docker

#重启

systemctl restart docker

#修改镜像仓库地址,这里用的阿里镜像加速

vim /etc/docker/daemon.json { "registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"] }

systemctl daemon-reload

systemctl restart docker

#修改ip段

vim /etc/docker/daemon.json { "bip":"172.17.3.1/24", "registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"] }

systemctl daemon-reload

systemctl restart docker

#拉取镜像

docker pull nginx

#测试运行

docker run -d –name nginx nginx

`

Docker命令

命令集合

  • docker操作 版本/信息

docker [info|version]

  • 容器操作 容器生命周期管理

docker [run|start|stop|restart|kill|rm|pause|unpause]

  • 容器操作运维

docker [ps|inspect|exec|logs|export|import|port]

  • 容器rootfs命令

docker [commit|cp|diff]

  • 镜像操作 镜像管理

docker [images|rmi|tag|build|history|save|import]

  • 仓库操作 镜像仓库

docker [login|pull|push|search]

常用命令

`

#查看镜像信息列表

docker images

#查看运行中的所有容器(后面加上-a,查看所有容器包括非运行中)

docker ps

#从镜像仓库中拉取镜像,不带:version代表拉取最后版本

docker pull [images]:[version]

#进入docker容器,-it打开人机交互, /bin/bash 代表linux的shell环境

docker exec -it nginx /bin/bash

#退出也关闭容器

Exit

#退出不关闭容器

Ctrl+P+Q

#后台启动容器,--privileged容器将拥有访问主机所有设备的权限

docker run -d –name --privileged nginx nginx

#查看容器信息

docker inspect nginx

#宿主机与docker容器目录挂载(挂载宿主目录会覆盖容器镜像模版目录,使用volumes方式)

docker run -d –name nginx2 -v /docker/nginx/conf:/etc/nginx/conf.d nginx

#多个容器共享数据卷(挂载目录)

docker run -it --name nginx3 --volumes-from nginx2 nginx

#绑定宿主机端口和docker的端口

docker run -d –name nginx3 -p 8080:80 nginx

#复制宿主机文件到容器

docker cp anaconda-ks.cfg cent:/var

#删除容器

docker rm [containerID]

#删除镜像

docker rmi [imageID]

`

docker挂载原则

  • 配置文件在宿主机直接配置
  • 生产业务数据文件在宿主机持久保存
  • 日志文件在宿主机方便查看
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!