docker 学习笔记
Docker的使用场景:
- 使用docker容器开发、测试、部署服务
- 创建隔离的运行环境
- 搭建测试环境
- 构建多用户的平台即服务(PAAS)基础设施
- 提供软件即服务(SaaS)应用程序
- 高性能、超大规模的宿主机部署
Docker的应用范围:
面向产品
面向开发
面向测试
面向运维
面向自动化
面向微服务
面向大规模的分布式架构(微信红包)
Docker依赖的linux内核特性:
Namespaces 命名空间(系统资源的隔离:进程,网络)
Contro group(cgroups)控制组
Nampspaces命名空间
PID 进程隔离
NET 管理网络接口
IPC 管理跨进程通信的访问
MNT 管理加载点
UTS 隔离内核和版本标识
Contro groups控制组
用来分配资源
来源于google
作用:
资源限制
优先级设定
资源计量
资源控制
Docker容器的能力:
文件系统隔离:每个容器都有自己的root文件系统
进程隔离:每个容器都运行在自己的进程环境中
网络隔离:容器间的虚拟网络接口和IP地址都是分开的
资源隔离和分组:使用cgroups将CPU和内存之类的资源独立分配给每个docker容器
Docker的基本命令:
1.查看所有镜像:docker images
docker images --no-trunc
2.启动容器:
运行容器输出字符串:docker run docker.io/learn/tutorial echo 'hello word' (docker.io/learn/tutorial 镜像名,下同)
运行容器安装ping:docker run docker.io/learn/tutorial apt-get install ping
docker run docker.io/learn/ping ping www.baidu.com
docker run --name=doc1 -d docker.io/ubuntu /bin/sh -c "while true;do echo hello word;sleep 1;done"
A. docker run --name=ubt -i -t docker.io/ubuntu /bin/bash
--name:自定义容器名
-i:保持终端打开状态
-t:tty打开
B.docker run -d -p 91:80 --name mynginx docker.io/nginx
-d:以守护形式启动容器(常驻后台)
-p:设置容器的端口映射
91:映射后的端口(外网访问:http://ip:91)
80:容器里的端口
3.查看容器
A.查看正在运行的容器:docker ps
B.查看所有容器:docker ps -a
C.查看最近运行的容器:docker ps -l
D.查看容器详细信息:docker inspect 93fa514d0759(容器ID)
4.进入容器
以守护形式运行容器:
进入正在运行的容器:docker attach 0de1ff2feb72(容器ID)
5.重启某个容器:docker restart doc1(容器名)
启动已停止的容器:docker start doc1 docker start -i doc1
停止守护式容器:dockrt stop doc1 docker kill doc1
(stop:发送停止的命令(有延迟) kill:直接停止(无延迟))
6.删除容器:docker rm doc1
强制删除容器:docker rm -f doc1
7.删除镜像:docker rmi docker.io/learn/ping
强制删除镜像:docker rmi -f docker.io/learn/ping
删除所有镜像:docker rmi (docker images -q)
8.搜索镜像:docker search ubuntu docker search -s 3 ubuntu
拉取:docker pull docker.io/ubuntu
保存:docker commit -a 'zhuoshao' -m 'nginx' commit_test zhuoshao/commit_test1
docker commit -m 'my nginx' 9354cd88d208 zhuoshao/my-nginx:v1
-a:作者名
-m:message,描述
commit_test:要保存的容器名(容器ID)
zhuoshao/commit_test1:保存后的镜像名
上传提交镜像(需要注册doucker hub账号):docker push zhuoshao/commit_test1
9.查看容器日志
docker logs -tf --tail 10 doc1
10.查看容器内进程:docker top 容器名
11.获取容器的pid:docker inspect --format "{{.State.Pid}}" uubt
通过pid进入容器(需要 yum install -y util-linux):nsenter --target 28487 --mount --uts --ipc --net --pid
查看ip路由:ip ro li
docker的数据卷:直接把数据写在硬盘上
1.创建一个数据卷容器(映射硬盘目录):
docker run -d -it --name volume-test1 -v /data docker.io/nginx
(修改本地目录文件,容器目录中文件改变。改变容器目录同理)
-i:保持终端打开状态
-t:tty打开
-v:使用数据卷
/data:容器中数据卷路径
查看数据卷映射目录:
docker inspect volume-test1 | grep Mounts -A 10
这是docker本地硬盘目录,进入此目录。创建一个文件:touch hehe
则在容器的data目录中也会出现响应的文件
2.把本地的目录映射到容器的目录当中:
docker run -it --name volume--test2 -h nginx -v /opt:/opt docker.io/centos
第一个opt:本地目录
第二个opt:容器目录
-h:别名
docker run -it --name volume--test2 -h nginx -v /opt:/opt:ro docker.io/centos
:ro:只读
3.新容器使用旧容器挂载的数据卷(挂载2的数据卷):
docker run -it --name volume-test3 --volumes-from volume-test2 docker.io/centos
容器的停止对数据卷没有影响
镜像的构建:
1.手动创建
docker search contos
docker pull docker.io/centos(镜像名)
创建容器(centos)
docker run -it --name volume-test3 --volumes-from volume-test2 docker.io/centos
构建nginx:
- 先安装工具和依赖:yum install -y wget gcc gcc-c++ make pcre-devel zlib-devel openssl openssl-devel
- 下载软件:wget http://nginx.org/download/nginx-1.16.1.tar.gz
- wget ftp://ftp.pcre.org/pub/pcre/pcre-8.40.tar.gz
- mv *.gz /usr/local/src
- cd /usr/local/src
- tar zxf pcre-8.40.tar.gz
- tar zxf nginx-1.16.1.tar.gz
- 创建一个www用户:useradd -s /sbin/nologin -M www
9.安装:./configure --prefix=/usr/local/nginx
10.make && make install
11.vi /etc/rc.local -> /usr/local/nginx/sbin/nginx
12.vi /usr/local/nginx/conf/nginx.conf -> daemon off;
保存容器:
docker commit -m 'my nginx' 9354cd88d208 zhuoshao/my-nginx:v1
测试运行:
docker run -d -p 99:80 zhuoshao/my-nginx:v1 /usr/local/nginx/sbin/nginx
其他例子:
docker run -p 80 --name web -i -t docker.io/ubuntu /bin/bash
apt-get install -y nginx
apt-get install -y vim
mkdir -p /var/www/html
cd /var/www/html
vim index.html
whereis nginx
ls /etc/nginx
ls /etc/nginx/sites-enabled
vim /etc/nginx/sites-enabled/default
nginx
ps -ef:查看运行的进程
查看端口映射情况:docker port web
查看容器中进程运行情况:docker top web
查看网站是否顺利运行:curl http://127.0.0.1:32768
curl http://172.17.0.2(容器的地址)
停止容器之后重新启动,发现nginx未启动
可使用exec命令启动子进程:docker exec web nginx
2.自动创建:dockerfile
运行:docker build -t nginx-file:v1 /opt/dockerfile/nginx/
其他:docker 的启动
数据卷的还原和备份:
♥ 作者:离岸少年
♠ 出处:https://www.cnblogs.com/jackzhuo/
♣ 本博客大多为学习笔记或读书笔记,本文如对您有帮助,还请多推荐下此文,如有错误欢迎指正,相互学习,共同进步。