1.制作镜像

使用阿里的yum源,网址:https://opsx.alibaba.com/mirror,或者mirrors.aliyun.com,点击帮助,就会有弹框出来.

  1. docker pull centos # 最好有加速器,要不然下载速度太慢
  2. docker run -it --name thirdcentos centos bash # 发现进入容器之后,不让我删之前那些*.repo,正好说明镜像的只读特性
  3. yum -y install wget
  4. wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
  5. wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
  6. yum -y install nginx
  7.  
  8. docker commit -m "install nginx in centos" thirdcentos centos_nginx
  9. commit参数说明-a:作者信息,-m:提交消息,-p:提交时暂停容器运行.
  10. thirdcentos是正在运行的容器名;
  11. centos_nginx是新镜像的名字,刚下载好的centos202MB,安装了一个nginx然后做成镜像,大小是373MB

在https://hub.docker.com上注册一个账号,然后登陆认证

2.上传镜像到docker-hub

  1. cat ~/.docker/config.json
  2. docker search mowang # 就可以找到我了--docker.io/mowang/taiyangshen
  3. docker tag centos_nginx:latest mowang/taiyangshen:centos_with_nginx

推送到taiyangshen这个仓库里,centos_with_nginx它其实是一个标签,但我一开始没弄懂,这些步骤可以执行,但是不规范,仓库名应该是某个软件名称,如:nginx、mysql、redis等,标签的话应该打上版本号.

  1. docker push mowang/taiyangshen:centos_with_nginx
  2. 报错:denied: requested access to the resource is denied
  3. 上网找了半天也没找到具体的解决办法,要么是让你写上自己的网站用户名,要么是让你登陆,
  4. # 我的解决办法是:多登陆几次.

第一次推送的时候用的不是上面那条推送命令,导致直接在docker-hub里面创建了一个仓库,然后我想删了它,发现删不掉,This deletes the repository, all the images it contains, and its build settings.This cannot be undone.Please type the name of your repository to confirm deletion: centos_nginx.主要还是英文没看懂,粘贴到有道里面,翻译:请输入存储库的名称以确认删除:centos_nginx,输入之后,点击确定,然后这个仓库就被删了...

3.端口映射

  1. docker run -d --name fourthnginx -P nginx # -P是随机端口,不实用
  2. 在物理机上访问nginx:http://10.0.0.20:32768
  3. docker run -d -p 80:80 --name fifthnginx nginx # 将宿主机的80端口映射到容器的80
  4. 0.0.0.0:80->80/tcp
  5. docker run -d -p 10.0.0.20:80:80 --name fifthnginx nginx

4.单台主机上两个容器的互联

  1. docker run -d --name web1 -p 80:80 nginx
  2. docker run -d --name web2 --link web1:nginx_web1 -p 81:80 nginx
  3. docker ps
  4. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  5. b6dbf5c77d01 nginx "nginx -g 'daemon ..." 4 seconds ago Up 2 seconds 0.0.0.0:81->80/tcp web2
  6. 20d1687b96b7 nginx "nginx -g 'daemon ..." About a minute ago Up About a minute 0.0.0.0:80->80/tcp web1
  7.  
  8. 注意:如果不是官方的nginx,则需要加全路径,并写上要执行的命令,如:-p 80:80 my_nginx nginx,前者是镜像名,后者是要执行的命令.
  9. docker exec -it web2 sh
  10. cat /etc/hosts
  11. ...
  12. 172.17.0.2 nginx_web1 20d1687b96b7 web1
  13. 172.17.0.3 b6dbf5c77d01
  14.  
  15. # 你会发现,nginx官方镜像没有yum、ping等命令,没法用,所以还是用centos官方镜像制作一个nginx镜像
  16. docker run -it --name runcentos centos_nginx bash
  17. # 在/etc/nginx/nginx.conf里加上daemon off,然后制作镜像
  18. docker commit -m "change nginx conf" runcentos nginx20190217
  19. # 删除所有镜像
  20. docker rm $(docker ps -a -q)
  21.  
  22. # 然后重复上面的操作
  23. docker run -d --name web1 -p 80:80 nginx20190217 nginx
  24. docker run -d --name web2 --link web1:nginx_web1 -p 81:80 nginx20190217 nginx
  25. docker exec -it web2 sh
  26. ping nginx_web1 # 可以ping通

5.实现跨主机互联

  1. linux-docker1:10.0.0.20,--bip=192.168.58.1/24,容器ip192.168.58.1,
  2. linux-docker2:10.0.0.21,--bip=192.168.158.1/24,容器ip192.168.158.1,
  3. linux-docker1上添加一条静态路由:
  4. route add -net 192.168.158.0/24 gw 10.0.0.21
  5. 然后我这是ping不通的,实验失败

6.数据管理

  1. docker run -it --name node --rm -v /opt/:/opt/ nginx20190217 bash
  2. # 挂载文件,默认是rw
  3. docker run -it --name node --rm -v /etc/hosts:/etc/hosts:ro nginx20190217 bash
  4. 用-v创建的容器,删除的时候也得加上-v,要不然数据删不了

7.使用Dokcerfile创建镜像

一般而言,Dockerfile分为4个部分:基础镜像信息;维护者信息;镜像操作指令;容器启动时执行指令

  1. cat /root/Dockerfile
  2.  
  3. #第一行必须指定基于的基础镜像
  4. FROM centos
  5. #维护者信息
  6. MAINTAINER docker_user docker_user@email.com
  7. #相关操作
  8. RUN rpm -ivh https://mirrors.aliyun.com/epel/7/x86_64/Packages/e/epel-release-7-11.noarch.rpm
  9. RUN yum -y install nginx
  10. # add file
  11. ADD index.html /usr/share/nginx/html/index.html
  12. RUN echo "daemon off;" >> /etc/nginx/nginx.conf
  13. # 设置开放端口
  14. EXPOSE 80
  15. # 执行命令
  16. CMD ["nginx"]
  17.  
  18. echo "<h1>this nginx image is installed by Dockerfile</h1>" >/root/docker/index.html
  19. docker build -t mowang/nginx /root/docker/

8:搭建docker私库

  1. cd /opt/
  2. mkdir auth
  3. docker run --entrypoint htpasswd registry -Bbn mowang root123 > auth/htpasswd
  4. cat auth/htpasswd
  5. mowang:$2y$05$Kk3MuTox9ADV96jmV0ldDe7B5gu/wFT4.9gty7/YBZAbJuL2vir2C
  6.  
  7. docker run -d -p 6000:5000 --restart=always --name selfregistry -v `pwd`/auth:/auth \
  8. -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
  9. -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" registry
  10. 2e9b302aa9f58148c20e73da8815f40c5dbf4400960aa50ef2392dc5dd9d8f7c
  11. # 可以登录,但是不能登录10.0.0.20:6000,做一下信任即可,下篇博客会写到
  12. docker login 127.0.0.1:6000

9.单机容器编排

  1. pip install docker-compose
  2. cat docker-compose.yml
  3. web1:
  4. image: nginx
  5. expose:
  6. - 80
  7. web2:
  8. image: nginx
  9. expose:
  10. - 80
  11. haproxy:
  12. image: haproxy
  13. volumes:
  14. - /opt/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg
  15. links:
  16. - web1
  17. - web2
  18. ports:
  19. - "7777:1080"
  20. - "80:80"

docker-compose中的知识点还是很多的,但讲的并不多,以后有时间会单独写一篇docker-compose的博文.

docker网络及Dockerfile的更多相关文章

  1. Docker进阶:容器卷、DockerFile、Docker网络原理

    1.Docker镜像 1.1镜像是什么 镜像是一种轻量级.可执行的独立软件包,用来打包软件运行环境和机遇运行环境开发的软件. 包含一个软件的所有内容.蒋所有的应用和环境,直接打包为docker镜像,直 ...

  2. 理解Docker(5):Docker 网络

    本系列文章将介绍 Docker的相关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 ...

  3. 理解Docker :Docker 网络

    本系列文章将介绍 Docker的相关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 ...

  4. (转)Docker 网络

    转:https://www.cnblogs.com/allcloud/p/7150564.html 本系列文章将介绍 Docker的相关知识: (1)Docker 安装及基本用法 (2)Docker ...

  5. docker中的dockerfile

    什么是dockerfile? Dockerfile是一个包含用于组合映像的命令的文本文档.可以使用在命令行中调用任何命令. Docker通过读取Dockerfile中的指令自动生成映像. docker ...

  6. Docker学习笔记-Dockerfile文件详解

    什么是Dockerfile? Docker中有个非常重要的概念叫做--镜像(Image).Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序.库.资源.配置等文件外,还包含了一些为运 ...

  7. Docker网络,手把手教你如何实现容器网络相关知识

    Docker网络 理解Docker0 清空所有环境 测试 三个网络 #问题:docker 是如何处理容器网络访问的? [root@hsStudy /]# docker run -d -P --name ...

  8. Docker Command and Dockerfile

    镜像相关命令 # 下载镜像 docker pull xxx # 搜素镜像 docker search xxx # 查看已经下载了哪些镜像 docker images # 查看已下载镜像的id dock ...

  9. Docker小白到实战之Docker网络简单了解一下

    前言 现在对于Docker容器的隔离性都有所了解了,但对容器IP地址的分配.容器间的访问等还是有点小疑问,如果容器的IP由于新启动导致变动,那又怎么才能保证原有业务不会被影响,这就和网络有挂钩了,接下 ...

随机推荐

  1. Python全栈工程师(包、模块 的导入)

    ParisGabriel                每天坚持手写  一天一篇  决定坚持几年 为了梦想 为了信仰     Python人工智能从入门到精通 $ pip3 install tenso ...

  2. cloud.cfg_for_centos

    users: - default disable_root: 0 ssh_pwauth: 1 locale_configfile: /etc/sysconfig/i18n mount_default_ ...

  3. 聊聊、Java SPI

    SPI,Service Provider Interface,服务提供者接口. Animal 接口 package com.rockcode.www.spi; public interface Ani ...

  4. Java 多线程(Thread)学习

    多线程:就是进程的扩展,实现并发.一个进程可以包含多个线程,进程一般是由操作系统控制,而线程就是由程序员控制的,所以作为编程人员做好线程是我们的重点. 线程和进程一样分为五个阶段:创建.就绪.运行.阻 ...

  5. BZOJ 4326 NOIP2015 运输计划(树上差分+LCA+二分答案)

    4326: NOIP2015 运输计划 Time Limit: 30 Sec  Memory Limit: 128 MB Submit: 1388  Solved: 860 [Submit][Stat ...

  6. BZOJ2157 旅游 【树剖 或 LCT】

    题目 Ray 乐忠于旅游,这次他来到了T 城.T 城是一个水上城市,一共有 N 个景点,有些景点之间会用一座桥连接.为了方便游客到达每个景点但又为了节约成本,T 城的任意两个景点之间有且只有一条路径. ...

  7. stringutil的方法

    StringUtils 源码,使用的是commons-lang3-3.1包. 下载地址 http://commons.apache.org/lang/download_lang.cgi 以下是Stri ...

  8. js判断对象是否为数组

    1.ECMAScript5中有一个现成的方法:Array.isArray(). var obj = {1:[1],2:[2]}, arr = [1], str = "1"; Arr ...

  9. jenkins 自定义主题

    一.概述 jenkins更新后,页面css布局都已改变,我现在用的jenkins.css, ( png图片需自定义) #page-body { background-image:url(http:// ...

  10. Hibernate中inverse="true"的理解

    Hibernate中inverse="true"的理解 举例如下 转自:http://lijiejava.iteye.com/blog/776587 Customer类: publ ...