docker安装及基础命令

一年好景君须记,最是橙黄橘绿时。这篇文章主要讲述docker安装及基础命令相关的知识,希望能为你提供帮助。
官网:??https://www.docker.com/??

支持系统:ubuntu centos redhat debian fedora,甚至mac,windows
linux系统上需要内核版本在3.10或以上

??github地址:https://github.com/moby/moby??
moby项目属于docker项目的全新上游,docker将是一个隶属于moby的子产品
ce:社区版本(安全维护4个月)
ee:企业版(安全维护1年)

官方rpm 包下载地址
??https://download.docker.com/linux/centos/7/x86_64/stable/Packages/??
阿里镜像下载地址
??https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/Packages/??
?yum安装?
rm -rf /etc/yum.repos.d/*
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install docker-ce
systemctl start docker & & systemctl enable docker
docker version

docker info
#提示:
---------------------------------------------------------------------------------------------
WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled
WARNING: the devicemapper storage-driver is deprecated, and will be removed in a future release.
WARNING: devicemapper: usage of loopback devices is strongly discouraged for production use.
Use `--storage-opt dm.thinpooldev` to specify a custom block storage device.
---------------------------------------------------------------------------------------------

?docker存储引擎?
官方文档关于存储引擎的选择文档
??https://docs.docker.com/storage/storagedriver/select-storage-driver/??
在docker 安装启动之后,默认会生成一个名称为docker0的网卡,并且默认IP地址为:172.17.0.1 的网卡。

目前docker默认存储引擎overlay2,需要磁盘分区支持d-type文件分层功能,因此需要系统磁盘的额外支持
Docker 官方推荐首选存储引擎为overlay2 其次为devicemapper
devicemapper存在使用空间方面的一些限制,虽然可以通过后期配置解决,但是官方依然推荐使用overlay2 ,
以下是网上查到的部分资料https://www.cnblogs.com/youruncloud/p/5736718.html

xfs_info /
如果docker数据目录是一块单独的磁盘分区而且是xfs格式的,那么需要在格式化的时候加上参数 -n ftype=1
否则后期在启动容器的时候会报错不支持d-type
会提示:WARNING:overlay : the backing xfs filesystem is formatted without d_type support

?containerd进程关系?
dockerd:#被client直接访问,其父进程为宿主机的systemd守护进程
docker-proxy:#实现容器通信,父进程为dockerd
containerd:#被dockerd进程调用以实现与runc交互
containerd-shim: #真正运行容器的载体,其父进程为containerd

containerd-shim 命令使用
containerd-shim -h

#版本:18.09.7
dockerd--> docker-proxy
--> containerd--> containerd-shim--nginx--nginx
--containerd-shim
--> containerd

#18.06版本以前
dockerd--docker-containe--docker-containe--nginx--nginx
--docker-containe
--docker-containe--nginx--nginx
--docker-containe
--> docker-proxy

?容器创建与管理过程?
1. dockerd 通过grpc和containerd模块通信,dockerd由libcontainerd负责和containerd 进行交换,
dockerd和containerd通信socket文件:/run/containerd/containerd.sock

2. containerd在dockerd启动时被启动,然后containerd启动grpc请求监听,containerd 处理grpc请求,
根据请求做相应动作。

3. 若是start或是exec容器,containerd拉起一个container-shim,并进行相应的操作。

4. container-shim 被拉起后,start/exec/create 拉起runC进程,通过exit 、control文件和
containerd通信,通过父子进程关系和SIGCHLD监控容器中进程状态。

5. 在整个容器生命周期中,containerd通过epoll监控容器文件,监控容器事件。


gRPC是Google开发的一款高性能、开源和通用的RPC框架,支持众多语言客户端。


?docker镜像加速?
??http://cr.console.aliyun.com??
#ubuntu/centos
1.安装/升级Docker客户端
推荐安装1.10.0以上版本的Docker客户端,参考文档docker-ce #https://developer.aliyun.com/article/110806

2.配置镜像加速器
针对Docker客户端版本大于 1.10.0 的用户
您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json < < -EOF

"registry-mirrors": ["https://vmaivck0.mirror.aliyuncs.com"]

EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

?docker镜像管理?
镜像:包含启动容器所需要的文件系统及所需要的内容
镜像主要用于创建并启动容器
镜像里面是一层层文件系统,叫union FS(联合文件系统); 联合文件系统,可以将几层目录挂载到一起,形成一个虚拟文件系统
联合文件系统可以对每一层系统设置三种权限,只读(readonly) 读写(readwrite) 写出(writeout-able); 但是docker镜像中每一层文件系统都是只读的

虚拟环境=宿主机内核+文件系统


linux文件系统由:bootfs+rootfs两部分组成
bootfs(boot file system):bootloader+kernel
bootloader,用于引导加载kernel,kernel被加载到内核,bootfs被umount

rootfs(root file system):/dev /proc /bin /etc/等标准目录和文件
不同linux发行版本,在rootfs这一层会有所区别

docker镜像直接调取宿主机的内核,镜像中只提供rootfs


?命令?
【docker安装及基础命令】?docker 命令是最常使用的docker客户端命令?
xfs_info /#查看磁盘分区是否支持d-type

#1.镜像搜索
docker search centos:7.2.1511#带版本号
docker search centos#不带版本号,默认latest

#2.从docker仓库下载镜像到本地
docker pull 仓库服务器:端口/项目名称/镜像名称:tag(版本)号
docker pull alpine
docker pull nginx
docker pull hello-world
docker pull centos

#3.镜像查看
docker image ls
docker images

#4.导出镜像
docker save centos -o /opt/centos.tar.gz
docker save centos > /opt/centos-1.tar.gz

#5.镜像导入
docker load < /opt/centos.tar.gz
docker load -i centos.tar.gz

#6.删除镜像
docker rmi centos#通过镜像启动容器的时候镜像,不能被删除,除非将容器全部关闭

#7.获取运行参数帮助
docker daemon -help

#8.删除容器
docker rmid/名称
docker rm -f id/名称 #强制删除正在运行的容器

#9.启动容器
docker run [选项] [镜像名] [shell命令] [参数]
-t #让docker分配一个伪终端并绑定到容器的标准输入上
-i #则让容器的标准输入保持打开
范例:
--------------------------------------------------------------------------------------
docker run centos /bin/echo hello world#启动容器执行完shell命令就退出
docker run -it docker.io/centos bash#直接进入容器,生成随机容器id和名称

#自定义容器名称
docker run -it --name nginx-test nginx

#指定端口映射
docker run -p 81:80 --name nginx-test-port1 nginx
docker run -p 192.168.10.205:81:80 --name nginx-test-port1 nginx
docker run -p 86:80/tcp -p 443:443/tcp -p 53:53/udp--name nginx-test-port1 nginx

#后台启动
docker run -d -P --name nginx-test1 docker.io/nginx

#单次运行
docker run -it --rm --name nginx-delete-test nginx

#创建并进入容器
docker run -it --name test-centos2 docker.io/centos /bin/bash#exit退出容器

#传递运行命令
容器,需要有一个前台运行的进程才能保持容器的运行,通过传递运行参数是一种方式
另外也可以在构建镜像的时候指定容器启动时运行的前台命令
docker run -d centos /usr/bin/tail -f /etc/hosts
--------------------------------------------------------------------------------------

#10.退出容器不注销
ctrl+p+q

#11.显示容器
docker ps
docker ps -a #显示所有

#12.容器访问日志
docker logs nginx-test-port3#一次性查看
docker logs -f nginx-test-port3 #持续查看

#13.查看容器已经映射的端口
docker port nginx-test-port5

#14.启动/关闭容器
docker stop/start id/名称

#15.进入正在运行的容器
----------------------------------------------

    推荐阅读