docker基础之02

自定义镜像

1>docker commit

思路: 使用镜像启动容器,在该容器基础上修改,将该配置好的容器通过docker commit命令创造出一个新的镜像

  1. [root@jacob ~]# docker run -itd centos /bin/bash------------使用镜像启动容器,
  2. 修改(增删改数据、安装软件、修改配置文件等)-------------在该容器基础上修改配置
  3. exit------退出容器
  4. docker ps -a-------列出所有虚拟机,需要用到刚创建的docker的ID
  5. [root@jacob ~]# docker commit IDs name:label
  6. docker commit 78c1f924c498 myos----------------将该配置好的容器通过docker commit命令创造出一个新的镜像
  7. docker images-------列出所有镜像
  8. docker run -it myos /bin/bash------以该新自定义配置的镜像新开容器(就相当于是一个新的模版)

 

2>Dockerfile

• Dockerfile语法格式

  1. – FROM:基础镜像(根据镜像) 从哪儿来?
  2. – MAINTAINER:镜像创建者信息
  3. – EXPOSE:开放的端口
  4. – ENV:设置变量
  5. – ADD:把本地文件放到容器里面去
  6. – RUN:制作镜像时执行的命令,可以有多个(run指在容器里面执行命令)
  7. – WORKDIR:定义容器默认工作目录
  8. – CMD:容器启动时执行的命令,仅可以有一条CMD
  9. Docker build -t 新的镜像名称:标签

 

• 使用Dockerfile工作流程


mkdir oo

cd oo
touch Dockerfile----------D一定要大写

[root@docker1 oo]# vim Dockerfile

FROM centos:latest
RUN rm -f /etc/yum.repos.d/*.repo
ADD centos7.repo /etc/yum.repos.d/r.repo
RUN yum install -y net-tools psmisc vim-enhanced

[root@docker1 oo]# docker build -t ypf:latest .-------------  也可以写成 docker build -t ypf:latest /root/oo
Sending build context to Docker daemon 3.072 kB
Step 1 : FROM centos:latest
 ---> e934aafc2206
Step 2 : RUN rm -f /etc/yum.repo.d/*.repo
 ---> Running in 1cbddd279e7f
 ---> 07a3a0fdc01f
Removing intermediate container 1cbddd279e7f
Step 3 : ADD centos7.repo /etc/yum.repo.d/r.repo
 ---> 5d15615200e7
Removing intermediate container e4d78f9bf9a2
Step 4 : RUN yum install -y net-tools psmisc vim-enhanced
 ---> Running in bf5b48a44660

[root@docker1 oo]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
ypf                 latest              7c9318505333        About a minute ago   346.2 MB

[root@docker1 oo]# docker run -it ypf

[root@32ac56bcbb88 /]# ifconfig-------------可以看到ifconfig可以使用了
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.2  netmask 255.255.0.0  broadcast 0.0.0.0
        inet6 fe80::42:acff:fe11:2  prefixlen 64  scopeid 0x20<link>

 

 


• Dockerfile文件案例

[root@jacob build]# cat Dockerfile

FROM centos

MAINTAINER Jacob redhat@163.com

ENV NAME=Jacob

ENV environment=test

WORKDIR /var/www/html

ADD test.sh /root/test.sh

RUN mkdir /dockerfile

RUN echo "test" > /dockerfile/file.txt

RUN yum -y install httpd

RUN echo "test" > /var/www/html/index.html

EXPORSE 80

CMD [“httpd", "-DFOREGROUND"]

 

案例1:制作自定义镜像pstree -p

 

制作自定义镜像

– 基于centos镜像使用commit创建新的镜像文件

– 基于centos镜像使用Dockerfile文件创建新的镜像文件

 

自定义镜像仓库

registry基本概念

• 共享镜像的一台服务器(镜像化的一台服务器)

pstree -p

– 基于centos镜像使用commit创建新的镜像文件

– 基于centos镜像使用Dockerfile文件创建新的镜像文件

 

 

自定义私有仓库

• 流程:

在自定义镜像仓库的服务器(192.168.1.101)上

配置文件 /etc/docker/daemon.json
{
  "insecure-registries" : ["192.168.1.11:5000"]
}

完成配置以后重启 docker 服务
systemctl restart docker

启动私有仓库服务
docker run -d -p 5000:5000 registry

– docker tag 镜像 IP:5000/镜像:label

docker tag myos:latest 192.168.1.11:5000/myos:latest

– docker push IP:5000/镜像:label

docker push 192.168.1.11:5000/myos:latest

客户机使用私有镜像源
配置 daemon.json
重启服务 systemctl restart docker
启动容器

[root@docker2 ~]# docker run -it 192.168.1.101:5000/myos
Unable to find image '192.168.1.101:5000/myos:latest' locally
latest: Pulling from myos
9770d73ca513: Pull complete
ae4218ccc270: Pull complete
Digest: sha256:4f100a30c95d307b94fd9a7109cd40ae633831bc718a642d7eff6ae2af2e8a07
Status: Downloaded newer image for 192.168.1.101:5000/myos:latest

 

[root@docker2 ~]# docker images
REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
192.168.1.101:5000/myos     latest              8541104a5ae5        5 hours ago         314 MB

[root@docker2 ~]# docker pull 192.168.1.101:5000/centos
Using default tag: latest
latest: Pulling from centos
9770d73ca513: Already exists
Digest: sha256:aac8a9e78aaaea4b7a29125007d8dc1b0a5787e0a4ab39ff69c98141ae07f1da
Status: Downloaded newer image for 192.168.1.101:5000/centos:latest

[root@docker2 ~]# docker images
REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
192.168.1.101:5000/myos     latest              8541104a5ae5        5 hours ago         314 MB
192.168.1.101:5000/centos   latest              e934aafc2206        4 months ago        198.6 MB

[root@docker2 ~]# docker run -it 192.168.1.101:5000/centos

 

在自定义镜像仓库的服务器(192.168.1.101)上:

yum -y install httpd

systemctl start httpd

[root@docker2 ~]# curl http://192.168.1.101:5000/v2/_catalog--------查看容器中有哪些镜像
{"repositories":["centos","myos"]}

查看私有仓库有什么样的镜像
curl http://192.168.1.11:5000/v2/_catalog
查看私有仓库的镜像有什么样的标签
curl http://192.168.1.11:5000/v2/myos/tags/list


 


持久化存储

存储卷

卷的概念

• docker容器不保持任何数据

• 重要数据请使用外部卷存储(数据持久化)

• 容器可以挂载真实机目录或共享存储为卷

 

主机卷的映射

• 将真实机目录挂载到容器中提供持久化存储

存储卷映射
docker run -itd -v 物理机文件夹:容器内文件夹 镜像:标签

[root@jacob ~]# docker run -v /data:/data -it centos bash


共享存储

 

共享存储基本概念

• 一台共享存储服务器可以提供给所有Docker主机使用

• 共享存储服务器(NAS、SAN、DAS等)

• 如:

– 使用NFS创建共享存储服务器

– 客户端挂载NFS共享,并最终映射到容器中

 

使用共享存储的案例

  • NFS共享服务器
  1. – yum -y install nfs-utils
  2. – vim /etc/exports
  3. /22     *(rw,no_root_squash)
  4. echo ewirtoier > /22/index.html
  5. – systemctl start nfs
  • docker1
  • [root@docker1 docker]# showmount -e 192.168.1.254
    Export list for 192.168.1.254:
    /22 *

  • mount -t nfs 192.168.1.254:/22   /999------------– mount挂载共享

    docker run -v /999:/var/www/html -it centos-------- 运行容器时,使用-v选项映射磁盘到容器中,将物理机上的/999 映射到容器里的/var/www/html


Docker网络架构

Linux网桥

创建虚拟网卡

• 真实网卡配置文件

– cat /etc/sysconfig/network-scripts/ifcfg-eth0

• 虚拟网卡配置文件

– cat /etc/sysconfig/network-scripts/ifcfg-eth0:0

 

[root@jacob ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0:0

TYPE=Ethernet

BOOTPROTO=static

... ...

NAME=eth0:0

DEVICE=eth0:0

ONBOOT=yes

IPADDR=192.168.4.15

 

创建虚拟网桥(虚拟交换机)

[root@jacob ~]# cat /etc/sysconfig/network-scripts/ifcfg-br0

TYPE=Bridge

BOOTPROTO=static

... ...

NAME=br0

DEVICE=br0

ONBOOT=yes

IPADDR=192.168.4.15

[root@jacob ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0

TYPE=Ethernet

BOOTPROTO=static

... ...

NAME=eth0

DEVICE=eth0

BRIDGE=br0

ONBOOT=yes

IPADDR=192.168.4.15

[root@jacob ~]# ~]# brctl show

Docker网络拓扑

查看Docker默认网络模型

[root@jacob ~]# docker network list

NETWORK ID NAME DRIVER   SCOPE

c0ae28d57b18 bridge bridge   local 桥接模型

b69d4c0c735f host host   local 主机模型

4dc88be13b81 none null   local 无网络

 

[root@jacob ~]# ip a s docker0

[root@jacob ~]# brctl show docker0 //启动容器会绑定该网桥

 

使用Docker创建网桥

新建Docker创建网桥

[root@jacob~]# docker network create --driver bridge test01

[root@jacob~]# docker network list

[root@jacob~]# ip a s

[root@jacob~]# docker network inspect test01

 

• 查看默认Docker创建的网络模型

– 自定义网段

[root@jacob ~]# docker network create --subnet=172.30.0.0/16 test01

 

 

使用自定义网桥

• 启动容器,使用刚刚创建的自定义网桥

[root@jacob ~]# docker run --network=bridge|host|none ... ...

[root@jacob ~]# docker run --network=test01 -id nginx



客户端访问容器内的资源

• 默认容器通过SNAT可以访问外网

• 但外部网络的主机不可以访问容器内的资源

• 端口映射

– 使用端口映射可以实现外部网络访问容器内的资源

[root@jacob ~]# docker run -p 8080 80 -id nginx

创建容器,使用宿主机的端口 -p 宿主机端口:容器端口
docker run -d -p 80:80 -v /var/webroot:/var/www/html 192.168.1.11:5000/myos:httpd------既端口多路复用,又进行存储卷影射

//如:真实机IP为192.168.4.5,

使用-p映射真实机的8080端口到容器中的80端口

[root@client ~]# firefox http://192.168.4.5

 

 

手动笔记:

 

学了docker应用场景是什么样的?

Web应用的自动化打包和发布

自动化测试和持续集成、发布

在服务型环境中部署和调整数据库或其他的后台应用

从头编译或者扩展现有的OpenShift(红帽的平台即服务)或cloud foundry(vmware推出的业界第一个开源云平台)平台来应用

 

 

Docker使用客户端-服务器(C/S)架构模式,使用远程API来管理和创建Docker容器

Docker容器通过docker镜像来创建。

容器与镜像的关系类似于面向对象编程中的对象与类型。

Docker镜像() 镜像是用于创建Docker容器的模板

Docker容器() 容器是独立运行的一个或一组应用

Docker客户端() Docker客户端通过命令行或者其他工具使用Docker API与Docker的守护进程通信

Docker主机() 一个物理或者虚拟机的机器用于执行Docker守护进程和容器

Docker仓库() Docker仓库用来保存镜像,可以理解为代码控制中的代码仓库。

Docker Hub提供了庞大的镜像集合供使用

Docker Machine 是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker。

 

 

 

 

 

 

 

自定义镜像:

1.启动一个centos容器

2.进入容器(配置成需要的系统)

  配置yum源

  安装常用工具软件

 

3.配置完成以后,停止容器,创建镜像

  Docker commit 容器ID 镜像名称:标签

创建一次 手工创建没有什么问题 

写成脚本可以自动创建

 

  1. 使用Dockerfile(创建个文件夹-》创建个Dockerfile文件(名字随意)-》运行后修改配置且创建成功)

Dockerfile 文件名

FROM 基础镜像

ADD 添加文件

RUN 在容器内运行命令

 

CMD  修改默认启动命令

 

docker build -t 新的镜像名称:标签 . 

 

 

– FROM:基础镜像(根据镜像创建命令) 从那儿来

– MAINTAINER:镜像创建者信息 谁做的

– EXPOSE:开放的端口 把多少物理机端口打开

– ENV:设置变量

– ADD:复制文件到镜像 把test.sh复制到镜像

– RUN:制作镜像时执行的命令,可以有多个(容器里执行后面的命令) 镜像执行命令

– WORKDIR:定义容器默认工作目录 在那里做事

– CMD:容器启动时执行的命令,仅可以有一条CMD 容器从那里启动

 

 

 

怎么启动两个服务?

 

 

pstree -p

 

出现问题:1.权限问题有没有给755  2.

 

自定义仓库:

docker run -d -p 5000:5000 registry //建立私有仓库,默认使用HTTPS。改成http

Vim /etc/docker/daemon.json

怎么看企业有什么镜像仓库?

通过dockerAPI查询

[root@localhost ~]# curl -i http://192.168.1.100:5000/v2/_catalog

[root@localhost ~]# curl -i http://192.168.1.100:5000/v2/busybox/tags/list

 

 

1.创建配置文件

vim /etc/docker/daemon.json

{

 "insecure-registries":["192.168.1.100:5000"]

}   

2.重启docker服务

systemctl restart docker.service

3.启动私有仓库

docker run -d -p 5000:5000 registry

4.上传镜像到私有仓库(给镜像打标签后上传)

docker tag busybox:latest 192.168.1.100:5000/busybox:latest

docker push 192.168.1.100:5000/busybox:latest

5.在另一台docker上测试

scp 192.168.1.100:/etc/docker/daemon.json /etc/docker/

systemctl restart docker.service 

docker run -it 192.168.1.100:5000/busybox:latest

 

 

持久化存储

主机卷映射:

docker run -d  -p 80:80 -v /var/webroot:/var/www/html 192.168.1.100:5000/myos:httpd

 

docker run -d  -p 80:80 -v /var/webroot:/var/www/html 192.168.1.100:5000/myos:httpd

 

共享存储映射:

 

Server:

yum -y install nfs-utils 

mkdir 创建适合的文件夹路径 比如:/nfsnaszhen

echo "115599" > /nfsnaszhen/test.txt

vim /etc/exports

/nfsnaszhen 192.168.1.100(rw)

systemctl start nfs

chmod 777 /nfsnas

 

Client:

mkdir 创建适合的文件夹路径 

mount 192.168.1.254:/nfsnaszhen/ /nfsnas/

 

 

 

 

 

 

docker run -it --network docker1 192.168.1.100:5000/centos

 

 

 

 

 

Virsh manager

 

Openstack 开源云计算管理平台

 

Docker在一两台机器上

100台怎么办?

Kubernetes集群(k8s)

 

 

Docker命令大全:

[root@localhost ~]# docker -v

Docker version 1.12.1, build 23cf638

[root@localhost ~]# docker --help

Usage: docker [OPTIONS] COMMAND [arg...]

       docker [ --help | -v | --version ]

 

A self-sufficient runtime for containers.

 

Options:

 

  --config=~/.docker              Location of client config files

  -D, --debug                     Enable debug mode

  -H, --host=[]                   Daemon socket(s) to connect to

  -h, --help                      Print usage

  -l, --log-level=info            Set the logging level

  --tls                           Use TLS; implied by --tlsverify

  --tlscacert=~/.docker/ca.pem    Trust certs signed only by this CA

  --tlscert=~/.docker/cert.pem    Path to TLS certificate file

  --tlskey=~/.docker/key.pem      Path to TLS key file

  --tlsverify                     Use TLS and verify the remote

  -v, --version                   Print version information and quit

 

Commands:

    attach    Attach to a running container

    build     Build an image from a Dockerfile

    commit    Create a new image from a container's changes

    cp        Copy files/folders between a container and the local filesystem

    create    Create a new container

    diff      Inspect changes on a container's filesystem

    events    Get real time events from the server

    exec      Run a command in a running container

    export    Export a container's filesystem as a tar archive

    history   Show the history of an image

    images    List images

    import    Import the contents from a tarball to create a filesystem image

    info      Display system-wide information

    inspect   Return low-level information on a container, image or task

    kill      Kill one or more running containers

    load      Load an image from a tar archive or STDIN

    login     Log in to a Docker registry.

    logout    Log out from a Docker registry.

    logs      Fetch the logs of a container

    network   Manage Docker networks

    node      Manage Docker Swarm nodes

    pause     Pause all processes within one or more containers

    port      List port mappings or a specific mapping for the container

    ps        List containers

    pull      Pull an image or a repository from a registry

    push      Push an image or a repository to a registry

    rename    Rename a container

    restart   Restart a container

    rm        Remove one or more containers

    rmi       Remove one or more images

    run       Run a command in a new container

    save      Save one or more images to a tar archive (streamed to STDOUT by default)

    search    Search the Docker Hub for images

    service   Manage Docker services

    start     Start one or more stopped containers

    stats     Display a live stream of container(s) resource usage statistics

    stop      Stop one or more running containers

    swarm     Manage Docker Swarm

    tag       Tag an image into a repository

    top       Display the running processes of a container

    unpause   Unpause all processes within one or more containers

    update    Update configuration of one or more containers

    version   Show the Docker version information

    volume    Manage Docker volumes

    wait      Block until a container stops, then print its exit code

 

Run 'docker COMMAND --help' for more information on a command.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值