学习Docker(一)
一、docker介绍
docker是半虚拟化,比完全虚拟化性能高,可以使用物理机性能100%
Docker 镜像(Images): 用于创建 Docker 容器的模板
Docker 容器(Container): 独立运行的一个或一组应用
Docker 客户端(Client): 客户端通过命令或 Docker API 与 Docker 的守护进程通信
Docker 主机(Host): 一个物理或者虚拟的机器,用于执行 Docker 守护进程和容器
Docker 仓库(Registry): 仓库用来保存镜像,可以理解为代码控制中的代码仓库
Docker Machine Docker: 一个简化Docker安装的命令工具
Docker项目的目标: 实现轻量级的操作系统虚拟化解决方案
Docker的基础: linux容器(LXC)等技术
二、安装
1、centos 6 安装
yum源:https://mirrors.ustc.edu.cn/epel/6/x86_64/
yum install -y docker-io
/etc/init.d/docker start 2、centos 7 安装
yum源:https://mirrors.ustc.edu.cn/epel/7/x86_64/
yum -y install docker
systemctl start docker
三、镜像管理
1、搜索镜像
docker search centos
2、获取镜像
docker pull centos
3、查看镜像
docker images
4、删除镜像
docker rmi centos
docker rmi 镜像名或ID -f 强制删除
5、导出镜像
docker save centos > /opt/centos.tar.gz
docker save -o /opt/centos.tar.gz centos:6
6、导入镜像
docker load < /opt/centos.tar.gz
docker load --input /opt/centos.tar.gz
7、镜像打标签
docker tag nginx nginx_1.12.2 #打标签
docker tag nginx_1.12.2:latest nginx:latest #修改标签
四、容器管理
1、启动Docker容器
docker run --name mydocker -itd centos /bin/bashdocker start 12(id) #前二位数就可以
2、查看容器
docker ps -a
docker ps -a -q #列出所有启动容器的ID
docker inspect #查看容器的详细信息(JSON格式)
docker inspect -f {{".Architecture"}} nginx #-f 指定某一项
3、停止容器
docker stop 961fd1162c2f
docker kill 23sdjlf33331
4、删除容器
docker rm c599b569f387 #删除已经停止的容器
docker rm -f 302f39c202c9 #强制删除运行或停止的容器
docker rm $(docker ps -a -q) #删除所有停止的容器
5、进入容器
1、attach命令
docker attach 867e6627a194 #当多个窗口同时用attach,操作同一个容器时,所有窗口会同步显示,当某个窗口阻塞时,其他窗口也无法操作
2、exec命令(推荐方式)
docker exec -it mynginx /bin/bash
3、nsenter工具
yum install -y util-linux #安装nsenter工具
docker inspect --format "{{.State.Pid}}" 5d2k9d #获取PID
nsenter -t 4851 -m -u -i -n -p
脚本:
#!/bin/bash
PID=`docker inspect --format "{{.State.Pid}}" $1`
nsenter -t $PID -u -i -n -p
6、导出容器
docker export 84acb55af1f9 > centos.tar.gz
7、导入容器
cat /tmp/centos.tar |docker import - centos:6
五、docker的基础命令
# docker -h
--config string #客户端配置文件的位置
-D, --debug #启用Debug调试模式
--help #查看帮助信息
-H, --host list #守护进程的套接字(Socket)连接
-l, --log-level string #设置日志级别
-v, --version #打印版本信息并退出
Commands:
attach #进入一个正在运行的容器
build #通过Dockerfile创建镜像
commit #提交当前容器为一个新的镜像
cp #从容器中拷贝指定文件或者目录到宿主机中
create #创建一个新的容器
diff#查看docker容器变化
events #从docker服务获取容器实时事件
exec #在一个已经运行的容器中运行一条命令
export #导出容器的内容流作为一个tar归档文件
history #展示一个镜像形成历史
images #列出系统当前镜像
import #导入一个镜像
info #显示系统信息
inspect #查看容器详细信息
kill #kill指定docker容器
load #从一个tar包中加载一个镜像(对应save)
login #注册或者登陆一个docker源服务器
logout #从当前Docker registry退出
logs #输出当前容器日志信息
pause #暂停容器
port #查看映射端口对应的容器内部源端口
ps #列出容器列表
pull #从docker镜像源服务器拉取指定镜像或者库镜像
push #推送指定镜像或者库镜像至docker源服务器
rename #重命名容器
restart #重启运行的容器
rm #移除一个或者多个容器
rmi #移除一个或者多个镜像
run #创建一个新的容器并运行一个命令
save #保存一个镜像为一个tar包(对应load)
search #在docker hub中搜索镜像
start #启动容器
stats #统计容器使用资源
stop #停止容器
tag #给源中镜像打标签
top #查看容器中运行的进程信息
unpause #取消暂停容器
update #更新一个或多个容器的配置信息
version #查看容器版本号
wait #截取容器停止时的退出状态值
六、端口映射
1、映射所有接口地址
docker run -d -p 5000:5000 centos_nginx bash
docker run -d -p 5000:5000 -p 8082:80 centos_nginx bash 2、映射到指定地址的指定端口
docker run -d -p 127.0.0.1:5000:5000 centos_nginx bash 3、映射到指定地址的任意端口
docker run -d -p 127.0.1.1::5000 centos_nginx bash 4、查看端口映射情况
docker port container_name/container_id
七、数据管理
容器中管理数据主要有两种方式:
1)数据卷(Data Volumes)
2)数据卷容器(Data Volumes Dontainers)
1、数据卷
docker run -itd --name web2 -v /data:/data centos
-v 指定挂载目录,前面的/data/为本地目录,后面的/data/为容器里的目录,会在容器中自动创建
2、数据卷容器
1、创建一个数据卷dbdata容器
docker run -it -v /dbdata --name dbdata centos
2、创建容器,挂载dbdata数据卷到容器中
docker run -it --volumes-from dbdata --name db1 centos
3、多个容器挂载多个数据卷
docker run -itd --name db5 --volumes-from db1 --volumes-from db4 centos
4、从其他的容器(已挂载容器卷),挂载容器卷
docker run -it --name db2 --volumes-from db1 centos
5、备注
挂载数据卷的容器,不用运行,删除了挂载的容器,数据卷不会删除,若要删除容器和数据卷,用docker rm -v命令
3、利用数据卷容器迁移数据
1、备份
docker run --volumes-from dbdata -v /backup:/backup --name work centos tar cvf /backup/backup.tar /dbdata
创建一个容器,挂载数据卷,并将本地目录挂载到容器里,使用tar 压缩备份 2、恢复
docker run -itd -v /dbdata --name db6 centos bash
docker run --volumes-from db6 -v /backup:/backup --name db7 centos tar xvf /backup/backup.tar
新建一个容器,挂载数据卷,并将本地的目录挂载容器里,使用tar 解压恢复
八、镜像制作
1、手动构建
1、启动centos容器
docker run -itd --name mynginx centos
2、进入容器并安装nginx
docker exec -it mynginx bash
yum -y install wget gcc gcc-c++ make openssl-devel pcre-devel
wget http://nginx.org/download/nginx-1.10.2.tar.gz
useradd -s /sbin/nologin -M www
tar xf nginx-1.10.2.tar.gz
cd nginx-1.10.2
./configure --prefix=/usr/local/nginx --user=www --group=www
make && make install
echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf 3、创建镜像
docker commit -m "my nginx" 335573f3663c wuhg/mynginx:v1
-m: 描述 wuhg: dockerhub的用户名 mynginx: 制作后的镜像名 v1: 版本号 4、启动镜像
docker run -d -p 91:80 wuhg/mynginx:v1 /usr/local/nginx/sbin/nginx 启动容器并启动nginx
2、自动构建
1)编辑dockerfile文件
# vim Dockerfile
FROM centos
MAINTAINER wuhg
RUN yum install -y wget gcc gcc-c++ make openssl-devel pcre-devel
ADD http://nginx.org/download/nginx-1.12.2.tar.gz
RUN tar zxvf nginx-1.12.2.tar.gz
RUN useradd -s /sbin/nologin -M www
RUN cd nginx-1.12.2 && ./configure --prefix=/usr/local/nginx --user=www --group=www && make && make install
RUN rm -fv /usr/local/nginx/conf/nginx.conf
ADD http://www.apelearn.com/study_v2/.nginx_conf /usr/local/nginx/conf/nginx.conf
RUN echo "mynginx" > /usr/local/nginx/html/index.html
RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf
EXPOSE 80
ENTRYPOINT /usr/local/nginx/sbin/nginx
2)创建镜像
# docker build -t wuhg/mynginx:v2 /tmp/
3)查看创建的镜像,并启动
# docker images
# docker run -itd -p 92:80 wuhg/mynginx:v2 bash
备注:
# docker run -e myname=tom centos #-e 设置变量
Dockerfile指令
FROM: 基础镜像
MAINTAINER: 维护者
RUN: 执行命令
ADD: 添加文件,自动解压
workdir: 当前工作目录(类似cd)
volume : 目录挂载
EXPOSE: 打开的端口
CMD: 指定启动容器时,默认执行的命令
ENV 指定一个环境变量(如: MySql)
COPY 复制文件或目录
ENTRYPOINT 指定镜像的默认入口命令
USER 运行容器时的用户名
WORKDIR ENTRYPOINT指令配置工作目录
ARG 指定镜像内使用的参数
SHELL 指定使用shell的默认类型
九、资源限制和隔离
容器资源分配
1)安装stress压力测试
# vim Dockerfile
FROM centos:6
ADD epel.repo /etc/repos.d/
RUN yum -y install stress
ENTRYPOINT ["stress"] epel源:https://mirrors.aliyun.com/epel/6/x86_64/
# docker build -t stress:V1 /root/ 2)CPU资源控制
docker run -itd --cpu-shares 100 stress:V1 --cpu 1 #--cpu-shares默认1024,--cpu 1是stress压力测试参数
docker run -itd --cpuset-cpus 0-2 stress:V1 #创建的容器只能使用012这三个核心
cat /cgroup/cpuset/docker/CONTAINTER_ID/cpuset.cpus
docker exec CONTAINER_ID taskset -c -p1 #查看容器内进程与cpu的绑定,容器内第一个进程的编号一般为1
3)内存资源控制
docker run -itd -m 128m stress:V1 --vm 1 --vm-bytes 128m --vm-hang 0 #-m设置容器使用最大物理内存,不含swap,--vm是压力测试参数
cat /cgroup/memory/docker/CONTAINER_ID/memory.limit_in_bytes
cat /cgroup/memory/docker/CONTAINER_ID/memory.memsw.limit_in_bytes
十、私有仓库
创建和使用私有仓库
1、自动下载registry镜像并启动容器,创建本地私有仓库。
docker run -d -p 5000:5000 registry 2、默认仓库创建的容器在/tmp/registry或/var/lib/registry
docker run -d -p 5000:5000 -v /data/registry:/tmp/registry registry 3、上传到私有仓库
docker tag nginx:v1 192.168.4.10:5000/nginx #必须带有私有仓库的ip:port
docker push 192.168.4.10:5000/nginx #上传到私有仓库 http上传方式:
# vim /etc/sysconfig/docker
other_args="--insecure-registry 192.168.4.10:5000"
# /etc/init.d/docker restart 4、下载
# vim /etc/sysconfig/docker
other_args="--insecure-registry 192.168.4.10:5000"
# /etc/init.d/docker restart
# curl http://192.168.4.10:5000/v2/_catalog
# docker pull 192.168.4.10:5000/nginx
十一、web管理软件shipyard
搭建过程( v2版):
1、修改docker监听ip和端口
# vim /etc/sysconfig/docker
other_args="-H tcp://0.0.0.0:235 -H unix:///var/run/docker.sock"
# /etc/init.d/docker restart 2、启动rethinkdb
1)获取一个/data的数据卷
docker run -itd --name shipyard-rethinkdb-data --entrypoint /bin/bash shipyard/rethinkdb -l
2)使用数据卷/data启动RethinkDB
docker run -itd -P --name shipyard-rethinkdb --volumes-from shipyard-rethinkdb-data shipyard/rethinkdb 3、启动shipyard控制器
docker run -itd -p 8080:8080 --name shipyard --link shipyard-rethinkdb:rethinkdb shipyard/shipyard 4、测试
通过浏览器访问http://192.168.4.10:8080
默认用户名/密码为 admin/shipyard 5、启动和停止顺序
docker stop shipyard shipyard-rethinkdb shipyard-rethinkdb-data
docker start shipyard-rethinkdb-data shipyard-rethinkdb shipyard
启动两个镜像(获取/data数据卷,使用数据卷/data启动rethinkdb),最后启动shipyard控制器
v3版本
curl -sSL https://shipyard-project.com/deploy | bash -s (一键安装)
十二、docker网络
1、查看docker网络
docker network ls 2、网络驱动
bridge: NAT模式,默认模式
host : 复制物理机网卡
none : 不会配置网络(要自定义配置) 3、案例
docker run -it --net=host -p 80:80 centos bash
docker run -itd --net=none --name=ng1 nginx 4、自定义docker网络(用脚本执行,删除ip地址,ssh连接不上)
ip link set docker0 down #禁用网桥docker0
brctl delbr docker0 #删除网桥docker0
brctl addbr br0 #添加网桥br0
ip addr add 192.168.4.2/24 dev br0 #br0网卡添加ip地址
ip addr del 192.168.4.2/24 dev eth0 #eth0网卡删除ip地址(
brctl addif br0 eth0 #网桥br0绑定eth0
ip link set br0 up #启用网桥br0
route add default gw 192.168.4.254 #添加网关
十三、使用 Supervisor 来管理进程
# vim supervisord.conf
[supervisord]
nodaemon=true
[program:nginx]
command=/usr/sbin/nginx
[program:php-fpm]
command=/usr/sbin/php-fpm
[program:mysql]
command=/usr/bin/mysqld_safe
学习Docker(一)的更多相关文章
- 从零开始学习 Docker
这篇文章是我学习 Docker 的记录,大部分内容摘抄自 <<Docker - 从入门到实践>> 一书,并非本人原创.学习过程中整理成适合我自己的笔记,其中也包含了我自己的 ...
- 如何学习Docker
如何学习Docker 学习Docker,如果没有云计算的基本知识,以及内核的基本知识,那么学习并理解起来会稍吃力.作为容器,Docker容器的优势在哪,不足在哪,最好了解容器的实现是怎样的(简单了解) ...
- 系统学习Docker 践行DevOps理念
Docker代表的容器技术是近两年的大热技术,和人工智能.区块链等热点不同,容器技术的门槛并不高,每一个开发.测试.运维人员都能在日常工作中掌握和使用,是当今IT从业人员的必备技能之一.本课程会带大家 ...
- 从零开始学习docker之在docker中搭建redis(集群)
docker搭建redis集群 docker-compose是以多容器的方式启动,非常适合用来启动集群 一.环境准备 云环境:CentOS 7.6 64位 二.安装docker-compose #需要 ...
- Docket学习--Docker入门
什么是Docker? Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的.可移植的.自给自足的容器.开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机). ...
- 学习docker
虚拟机下Ubuntu环境 1.sudo apt-get update 2.sudo apt-get install docker.io 3.在daocloud(http://www.daocloud. ...
- 学习docker可能会用到的参考
局域网部署Docker--从无到有创建自己的Docker私有仓库 http://lib.csdn.net/base/docker 正在刷(学习)一遍官方文档,上面是一些其他可能用到的资料,是在解决自己 ...
- 3W法则-学习Docker
一.前言 5W1H法则是在一次面试中学习到的,后来在工作也开始使用这种东西,虽然最后没去那家公司,但是也是学习到了,关注开这些东西以后,也发现了一些简化版的3W法则,最近公司也要搞Doce ...
- 1.ASP.NET Core Docker学习-Docker介绍与目录
Docker的优点: 1节约时间,快速部署和启动 2节约成本 3标准化应用发布 4方便做持续集成 5可以用Docker做为集群中的轻量主机或节点 6方便构建基于SOA或者微服务架构 的系统 学习目录: ...
- Docker学习のDocker初识
一.Docker是什么 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然 ...
随机推荐
- 如何通过xstart远程连接桌面
转至:https://www.cnblogs.com/LiuChang-blog/p/12324193.html 1.1.安装依赖包: (1)安装语言包: [root@slave-node2 ~]# ...
- Shell编程四剑客包括:find、sed、grep、awk
一.Shell编程四剑客之Find Find工具主要用于操作系统文件.目录的查找,其语法参数格式为: find path -option [ -print ] [ -exec -ok command ...
- 60天shell脚本计划-11/12-渐入佳境
--作者:飞翔的小胖猪 --创建时间:2021年3月18日 --修改时间:2021年3月22日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可 ...
- SQL Server--插入一天数据返回ID值
这里将该功能写成了一个存储过程, 本来只写Insert的话,返回1,即影响的行数,该数据没太大应用意义. 想在Insert的基础上,返回新添加的这条数据的ID,两种方法: 1 .添加第17行的Sele ...
- cmd 连接宝塔终端
- 如何在 MWeb 中配置 Hexo 等静态网站
原文链接 参考链接: https://zh.mweb.im/mweb-1.4-add-floder-octpress-support.html https://zhuanlan.zhihu.com/p ...
- CSAPP CH7链接的应用:静动态库制作与神奇的库打桩机制
目录 创建静态库 创建动态库 库打桩机制 编译时打桩: 链接时打桩 运行时打桩 运行时打桩的printf与malloc循环调用debug 使用LD_PRELOAD对任意可执行程序调用运行时打桩 总结 ...
- Android 12(S) 图形显示系统 - BufferQueue的工作流程(九)
题外话 Covid-19疫情的强烈反弹,小区里检测出了无症状感染者.小区封闭管理,我也不得不居家办公了.既然这么大把的时间可以光明正大的宅家里,自然要好好利用,八个字 == 努力工作,好好学习 一.前 ...
- CentOS7.5环境下Docker基本操作
1. 查找Docker中Centos镜像文件 docker search centos 2. 下载Docker中Centos镜像文件(默认下载最新版本) docker pull centos 3. ...
- turtle海龟库
•turtle的使用 #设置窗体大小 startx,starty非必需,默认在屏幕中间 turtle.setup(width,height,startx,starty) #海龟到(x,y)坐标 tur ...