0
点赞
收藏
分享

微信扫一扫

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监控容器文件,监控容器事件。

docker安装及基础命令_docker安装

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

docker安装及基础命令_docker安装_02

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镜像中每一层文件系统都是只读的

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

docker安装及基础命令_docker命令_03

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安装_04docker安装及基础命令_docker命令_05

命令

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 rm id/名称
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.进入正在运行的容器
--------------------------------------------------------------------------------------
#1.docker attach 容器名
所有使用此方式进入容器的操作都是同步显示的且使用exit退出后容器关闭,需要进入到有shell环境的容器
如:docker run -it centos bash
docker attach mystifying_elbakyan

#2.执行单次命令进入容器;exit退出,容器还在运行
docker exec -it mystifying_elbakyan /bin/bash

#获取容器mystifying_elbakyan的IP
docker inspect -f '{{.NetworkSettings.IPAddress}}' mystifying_elbakyan

#3.nsenter进入容器(nsenter命令;包:util-linux)
docker inspect -f "{{.State.Pid}}" mystifying_elbakyan #获取容器mystifying_elbakyan的PID
4587
nsenter -t 4587 -m -u -i -n -p

将nsenter 命令写入到脚本进行调用,如下:
cat docker-in.sh
-------------------------
#!/bin/bash
docker_in(){
NAME_ID=$1
PID=$(docker inspect -f "{{.State.Pid}}" ${NAME_ID})
nsenter t ${PID} -m -u -i -n -p
}
docker_in $1
-------------------------
chmod a+x docker-in.sh
--------------------------------------------------------------------------------------

#16.查看指定pid容器的信息
docker inspect 6cd9ad4c3ab3 # 6cd9ad4c3ab3容器id

#17.查看容器内部的hosts文件
--------------------------------------------------------------------------------------
[root@localhost data]# docker run -it --name centos-test docker.io/centos /bin/bash
[root@4565e35f6335 /]# cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2 4565e35f6335
--------------------------------------------------------------------------------------

#18.批量关闭正在运行的容器:
docker stop $(docker ps -a -q)
docker kill $(docker ps -a -q) #强制关闭所有运行中的容器

#19.批量删除已退出容器
docker rm -f `docker ps -aq -f status=exited`

#20.批量删除所有容器
docker rm -f $(docker ps -a -q)

#21.指定容器DNS
dns服务:默认采用宿主机的dns地址
1是将dns地址配置在宿主机
2是将参数配置在docker启动脚本里面 --dns=1.1.1.1
[root@localhost data]# docker run -it --rm --dns 223.6.6.6 centos bash
[root@8ba62cef697f /]# cat /etc/resolv.conf
search localdomain
nameserver 223.6.6.6

#22.镜像打tag
docker tag 镜像Id docker.io/taowenwu/centos-nginx

#23.-v 参数 将宿主机目录映射到容器内部
docker run -d --name web1 -v /root/bin/catalina.sh:/apps/tomcat/bin/catalina.sh:ro \
-p 8811:8080 tomcat-web:app1

docker run -d --name web1
-v /root/bin/catalina.sh:/apps/tomcat/bin/catalina.sh:ro \
-v /root/testapp:/apps/tomcat/webapps/testapp \
-p 8811:8080 \
tomcat-web:app1

#24.数据卷容器,是可以让B服务器访问A容器内容
卷容器server
docker run -d --name volumen-docker \
-v /root/bin/catalina.sh:/apps/tomcat/bin/catalina.sh:ro \
-v /root/testapp:/apps/tomcat/webapps/testapp tomcat-web:app2
启动端容器client
docker run -d --name web1 -p 8801:8080 --volumens-from volumen-docker tomcat-web1:app1

停止server可以启动新client ,删除server,不能启动新client
删除server,运行的client也能使用挂载的卷


#25.查看当前docker网卡信息
docker network list

bridge 桥接,使用自定义ip
host 使用物理机ip,并监听物理机ip监听端口
none
docker run -it -d --name nginx-host-test --net=host
举报

相关推荐

0 条评论