Docker 学习笔记

什么是Docker?

官方解释为一个类似集装箱的东西,把开发完成的应用或程序放到这个集装箱里去运行 ,整个环境都是独立 隔离的互相不干扰而整个docker平台就像一艘大货轮把这些集装箱都放到上面运行。

再举一个例子就是 本来房东要将自己的大房子对外出租 ,每个人睡一张床铺整个房子到处都是大大小小的床 一些生活用品堆的的到处都是,在用水用电等其他公共设施 都在统一的管理下 时间久了非常 繁琐 。

而现在引用docker的概念就是 把每个住户都分成一个小标间隔离起来 里面的水电生活设施都是独立的 住户们自己解决,设计,个性化

安装 Docker

官方源:
    yum install -y yum-utils device-mapper-persistent-data lvm2    //安装依赖
    yum-config-manager  --add-repo https://download.docker.com/linux/centos/docker-ce.repo  //安装yum源
    yum -y install docker-ce    //安装docker
阿里云源:
    yum install -y yum-utils device-mapper-persistent-data lvm2
    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo   # 阿里云源
    yum makecache fast
    yum -y install docker-ce

 

docker-cn 加速:
    vim /etc/docker/daemon.json
    {
      "registry-mirrors": ["https://registry.docker-cn.com"]
    }
docker-clound 加速:
    curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://6f41b03d.m.daocloud.io
阿里云 加速:
    https://cr.console.aliyun.com
    {
      "registry-mirrors": ["https://widbrt8z.mirror.aliyuncs.com"]
    }

登陆 Docker Hub

docker login --username=qxfell --password=qxfell123     # 登录docker hub
docker tag  nginx:v1  qxfell/nginx:v1                   # 镜像打标签 
docker push qxfell/nginx:v1                             # 上传 
docker pull  qxfell/nginx:v1                            # 下载

基本操作命令:

docker search                           # 查找镜像
docker  run                             # 运行镜像
-d                                      # 后台运行容器
-P                                      # -p 指定端口运行
docker ps -a                            # 查看所有容器(包括已睡眠)  去掉-a是查找正在运行的
docker run -i -t centos /bin/bash       # 与容器产生交互 进入到centos 镜像中
-t                                      # 在新容器内指定一个伪终端或终端
-i                                      # 允许对容器 内的标准输入进行 交互 
docker los 容器ID                     # 查看交互信息日志
docker rm $( docker ps -a -q )          # 清除睡眠的容器
docker run -d -p 8000:5000 training/webapp python app.py   # 将docker内部端口映射到本机8000端口
docker logs -f  容器ID                    # 查看容器的日志  后面加上容器ID即可
docker top 容器ID                     # 查看容器的进程 
docker exec -it 容器ID /bin/bash          # 进入指定容器
docker cp 容器ID:/usr/local/  /tmp        # 从容器里拷贝文件或目录到本地主机里
ps  -a                                  # 查看睡眠的容器 -q  显示容器标签/ID
attach                                  # 容器的标准输入  也就是进入容器里操作
rm                                      # rmi 删除镜像  rm  -f   强制删掉所有正在运行的容器
start                                   # 开启容器
stop                                    # 停止容器
kill                
pause/unpause     
rename                                  # 重命名容器

更多操作:
inspect                                 # 后面加上容器名字  查看容器所有属性信息 常见的网络信息等
exec                                    # -it  标准输入  和 attach 一样 进入模拟终端
top                                     # 查看容器的后台进程
port                                    # 将容器内的某个端口映射到宿主机上
cp                                      # 容器与宿主机之家互相拷贝
diff                                    # 可以看出系统有什么变化
logs                                    # 查看容器的输入日志
stats                                   # 命令用于显示一个或多个容器实时的资源使用情况,包括CPU,内存使用量,网络IO,磁盘IO等信息
update                                  # --image 指定新的镜像 更新镜像版本
events                                  # 从服务器获取实时事件

打包自定义镜像

docker commit -m="has update" -a="runoob" 容器ID runoob/ubuntu:v2
-m:         # 提交的描述信息
-a:         # 指定镜像作者
e218edb10161:容器ID
runoob/ubuntu:v2:   # 指定要创建的目标镜像名

导入导出镜像

// 导出
docekr export  容器名   保存的名字.tar 
例:docekr export  test01   test01.tar 
// 导入
docker import  名字.tar  镜像包名字
例: docker import  test-01.tar  centos

// 完整导出
docker save  镜像名  >  保存的名字.tar

// 完整导入
docker load  -i  保存的名字.tar

容器数据持久化:

# 挂载数据卷   将宿主机的目录当作卷 挂载到容器中
docker  run  -itd  -v  /data/web:/data  --name  web01  centos
docker  run  -itd  --volumes-from  容器名  --name  web02  centos

# Volume Bind Mount (推荐用这个)
--mount src=nginx-vol,dst=/usr/share/nginx/html    #  将容器里的内容挂载到宿主机的数据卷

# 管理卷:
docker volume create 数据卷名       # 创建数据卷
docker volume ls                    # 查看数据卷
docker volume inspect  数据卷名     # 查看数据卷的信息

# 启动容器 引用mount  根据创建的数据卷 挂载
docker run -d  -it  --name=nginx-test  --mount src=nginx-vol,dst=/usr/share/nginx/html  nginx   #

# 指定目录绑定  会替换容器中的内容  当容器里跑的是java应用   就可以把构建的 target/*.war 共享到容器里  直接重启容器就可以完成部署 
docker run -d  -it  --name=nginx-test  --mount type=bind  src=/wwwroot  dst=/usr/share/nginx/html  nginx   

清理删除容器

docker container stop nginx-test    # 停止容器
docker container rm nginx-test      #  删除容器
docker volume rm nginx-vol          # 删除数据卷

自定义网段

# 创建网络
docker network create  --subnet-10.0.0.0/16 network_10
docker  network ls

# 运行一个网段
docker run  -itd  --net=network_10  --ip  10.0.0.123  容器名   (centos)
docker inspect   容器名          # 查看容器ip信息

# 容器间通信
--link 
docker run -itd   --link  之前创建或有的容器名或主机名:新增一台的主机名    容器名

# restart重启
docker  run  -itd  --restart  always  centos     # 不断重启容器
docker  run  -it  --restart  always  centos     # 指定重启3次  onfailure:3 

# 容器修改DNS:
docker  run  -itd --dns  8.8.8.8  镜像名字(centos)

#指定容器的主机名
docker run  -itd  -h  qiangxianfei  centos  

# -e  传入变量
docker run  -itd  -e TEST=123  cetnos
docker  attach  容器名       # 将变量声明到容器中

3种网络模式

 bridge
    默认网络, docker 启动后创建一个docker0 网桥,默认创建的容器也是添加到这个上
 host
    容器不会获得一个独立的network namespace (命名空间)而是和宿主机公用一个
 none
    获取独立的network namespace 但不为容器进行任何网络配置
 container
    与指定的容器使用同一个network namespace 网卡配置也都是相同的自定义 

除了容器映射端口以外  还可以用iptables  来让容器对外进行访问 可以PREROUTING (路由前的匹配) 将88 端口转发到容器的80
iptables -t nat -A PREROUTING -d 192.168.80.128 -p tcp --dport 89 -j DNAT --to 172.17.0.2:80


容器配置自定义ip(永久生效)
vi  /etc/network/interfaces 
auto eth0
iface eth0 inet  static 

auto br0
iface br0 inet static  
address 192.168.1.120
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 192.168.1.1
bridge_ports eth0

 利用pipework 配置容器自定义ip
git clone https://github.com/jpetazzo/pipework
cp pipework/pipework  /usr/local/bin
docker run -itd  --net=none  --name test01 centos
pipework br0 test01  192.168.1.88/24@192.168.1.1

容器开启ssh服务

# 开启容器之后 进入安装openssh-server 提交一个新的镜像 然后在开启镜像 映射22端口
docker commit test01  centos_ssh 

Dockerfile 常用指令

FROM  //构建的新镜像是基于哪个镜像
 例 FROM centos6

MAINTAINER  // 镜像维护者姓名或邮箱地址 
例 MAINTAINER xfell

RUN  // 构建镜像时运行的shell命令 
例 RUN [ "yum","install","httpd"]  或者 RUN yum install

CMD //运行容器时 执行的shell命令 
例   CMD [ "-e" , "./start.sh"]
     CMD [ "/usr/sbin/sshd","-D" ]
     CMD  /usr/sbin/sshd  -D

EXPOSE  //声明容器运行的服务端口
例  EXPOSE 80 443

ENV  // 设置容器内环境变量
例   ENV MYSQL_ROOT_PASSWORD 123456

ADD  //拷贝文件或目录到镜像 如果是URL或压缩包

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值