docker基本使用
1. docker基本使用
#yum源安装
cd /etc/yum.repos.d/
wget -O /etc/yum.repos.d/ali_docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
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
yum clean all
#依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
#安装docker软件
yum install -y docker-ce-18.09.9-3.el7
#设置开机启动
systemctl enable docker.service
systemctl start docker.service
#检查状态.
systemctl enable docker.service
1.1 配置docker镜像加速
# 刀客镜像1 [建议使用]:
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
systemctl restart docker.service
# 阿里云镜像2:
[root@master docker]# cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://md4nbj2f.mirror.aliyuncs.com"]
}
# docker 下载加速
https://get.daocloud.io/
#尝试pull一个镜像,会发现快了很多
docker pull nginx
#更换源必须重启docker生效.
1.2 docker命令
#镜像创建 下载 查看 删除 操作:
### 下载镜像
docker pull 镜像名 |--如: docker pull nginx
### 查看下载的镜像
docker images |--直接命令就可以看到当前有哪些镜像
## 删除未运行的镜像
docker rmi [镜像名] |-- 如: docker rmi nginx 删除刚pull下来的nginx镜像
## 查看运行中的镜像[已经停止的镜像无法看到,但是可以通过 docker images 看到]
docker ps -a
##停止正在运行的镜像
docker stop [IMAGE ID]
如:
[root@k8s-master yum.repos.d]# docker ps -a
注意: 镜像配置了镜像源后,docker下载镜像都会从源中获取.
# 从容器复制文件到宿主机
docker cp
1.3 namespace隔离
namespace用于对资源的隔离,大致如下
1. UTS: 主机名和域名隔离
2. IPC: 共享内存隔离
3. PID: 进程编号隔离
4. nerwork : 网络协议隔离 IP 和 端口隔离
5. User : 用户隔离
1.4 cgroup 资源限制
如 内存使用 ,磁盘使用 CPU使用
2.0 容器镜像管理
2.1 创建容器
创建容器的思考:
1. 如何暴露出容器服务
2. 主机名和IP地址设置
3. 数据是否持久化(创建后产生的数据)
4. 镜像变量如何传入.
5. 资源限制, cpu 内存
docker stats 可以看到当前状态.
docker run -d \
-p 90:80 \ ##映射端口
-name web \ ## 容器名
-e abc=123 \ ## 变量传入
-m "500m" \ ## 限制内存 可以用 G m 如: -m=1G
--cpus="1.5" ## 最多允许的cpu数量 .5 是百分之五十.{0-1,0,1} cpu限制一般使用这个
-cpuset-cpus ## 限制cpu使用的核心 ""
--oom-kill-disable ##禁用 OOM killer
-v $PWD/wwwroot:/opt ##将容器中的 容器中的 wwwroot映射到了本地/opt目录持久化..
2.2 运行第一个镜像
[root@master docker]# docker run -d -p 88:80 nginx
78a1215ca93412336de1c455c83d75d47d3cc4787c3713353c940f1beb3aeae7
[root@master docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
78a1215ca934 nginx "nginx -g 'daemon of…" 4 seconds ago Up 3 seconds 0.0.0.0:88->80/tcp musing
## 进入镜像
docker exec -it [CONTAINER ID] /bin/bash
3. docker原理
3.1 namespace 资源隔离
UTS: 实现主机和域名的隔离
IPC: 实现共享内存段,信号和消息列队的分离
PID: 进程隔离
network: 网络隔离 IP 端口隔离.
mount: 文件系统隔离
user: 用户之间隔离
3.2 cgroups 资源限制
cgroup: 为dokcer实现资源限制, 比如cpu 内存,磁盘的资源限制
3.3 UFS 联合文件系统
联合文件系统: 就是能够将多个目录挂载成同一个文件系统
换句话说就是将多个目录挂载成同一个目录,主要特点是能从不同的文件系统中将文件挂载到虚拟的 "联合文件系统" 中,还能够把 "多个目录挂载合并成同一个目录" 这样docker能够在不修改原有的镜像同时,以最小的空间消耗对存储文件的修改
3.4 容器镜像文件修改原理.
容器会在pull的镜像中添加了一个读写层,在运行容器中,文件改动时会先从镜像里将要修改的文件复制到文件系统中的读写层中,等待修改完成后复制到镜像中替代原文件,如此一来, 基础镜像额源文件不会被修改,运行中的镜像中的文件会被修改.
换个例子 如: 一个nginx 他只有nginx.conf.default的默认配置文件, 如果你需要用nginx,你就需要将nignx.conf.defult 拷贝一份为nginx.conf或者其他的名字,你接下来网站的所有配置修改都会基于nginx.conf 而不是nginx.conf.default,在另一个网站也需要配置文件的时候它同样是 拷贝一次 nginx.conf.default为它想要的配置文件名,重新配,如此下来,无论如何修改,源文件总会是初始配置文件,被修改的只是拷贝的新文件. docker中也是同理.
注意: 如果你需要做数据持久化,你可以写成dockerfile 指定你的源目录.
4. docker images 镜像命令基础
列出本地镜像: docker image ls
列出本地镜像: docker images
列出本地全部镜像: docker images -a
列出本地nginx镜像: docker images nginx
docker images 可选项:
docker images -a : 列出所有镜像
docker images build : 通过dockerfile构建镜像
5. docker 创建容器基础选项
一般选项:
1. 设置主机名,IP
2. 暴露端口
3. 持久化数据, 日志,配置文件,源码等
4. 变量传入相关动作
5. 资源限制,cpu,内存等
创建容器参数解释:
-p 映射端口 -p 容器外部端口:容器内部端口
-d 后台运行
-v 挂载目录 如: -v /leilei:/usr/share/nginx/html
-e 变量传入
-m "1G" 内存限制
[cpu限制常用]
--cpus="0,1" CPU使用个数限制 只允许使用两个 [重点]
--cpus=".5" cpu使用百分比限制 .5 表示最多使用 50% cpu 1.5 表示最多使用一个半CPU
--cpus-shars cpu使用权重共享分配(按照权重分配)
--oom-kill-disable oom自动关闭配置 关闭,不配置默认开启,特别是java应用,需要关闭
--memory-swap="100m" swap使用100m 不写指 禁用swap
说了这么多选项,下面来一个示例:
#运行一个需要命令行解析的容器示例,如: nginx
docker container run -d \
-p 8888:8080 \
--name web \
-v /www:/opt \
-e abc="123456" \
-m "1G" \
--cpus="2" \
--oom-kill-disable \
lizhenliang/java-demo
#挂载本地目录形式:
docker container run --name nginx_leilei01 -d -p 90:80 -v /leilei:/usr/share/nginx/html nginx
#同时可以挂载多个目录或者文件,如指定自己的nginx配置文件:
docker container run --name nginx_leilei01 -d -p 90:80 \
-v /leilei:/usr/share/nginx/html \
-v /leilei/nginx.conf:/etc/nginx/conf/nginx.conf \
nginx
docker基础命令
##运行一个nginx容器:
docker run --name nginx -d -p 80:80 nginx
docker run --name [容器名] -d
-d 后台运行
-p 映射端口 [对外暴露的端口] : [容器内部端口]
--name nginx 容器名字
nginx 镜像名字
## 删除镜像
1. 停止镜像运行 docker stop web
2. 删除容器iamge docker rm web
3. 删除镜像 docker rmi lizhenliang/java-demo:latest
## 进入一个容器:
docker run -it nginx /bin/sh
docker exec -it 3ea86d362c1d /bin/sh
解释:
run 创建并运行一个容器
-it 分配交互式的终端 [如果只有t参数,使用ctrl+c就会退出容器]
--name 容器名字
/bin/sh 命令解释器
exec 进入一个容器
## 停止容器
docker stop 容器名
一次性停止所有容器
docker stop $(docker ps -a -q)
## 干掉容器
docker kill $(docker ps -a -q)
#常用参数:
-v 挂载磁盘 [ -v 宿主机目录:容器目录 ]
#镜像命令
docker search nginx 搜索镜像
docker pull nginx 下载镜像
docker images 列出镜像
docker image save 保存镜像
docker image load 导出镜像
docker rmi 删除镜像
#容器相关操作
docker run 运行一个容器
docker exec 进入一个容器
docker ps 查看运行的容器
docker ps -a 查看所有容器
docker stop 停止一个容器
docker start 启动一个容器
docker kill 关闭一个容器
docker rm 删除一个容器
docker rename 重命名一个容器 如:docker rename nginx nginx1
docker top 查看容器内运行进程信息
docker pause 暂停一个容器:
docker unpause 恢复被暂停的容器
docker stats 显示容器的实时流资源使用统计信息
docker cp /root/1.txt 23er23rs:/www 拷贝文件到docker中,可通过: docker exec nginx1 ls /tmp 查看
6. docker运行一个基础演示镜像
运行:
访问测试:
进入查看容器中的 opt中是否有html文件
[root@master www]# docker exec -it web bash
[root@ae3561a70c8e tomcat]# ls /opt/
index.html
有这个文件就证明,文件映射到了容器中.