docker

docker的组成

client、server

docker组件

镜像image :镜像是只读的
容器container :启动容器的时候是在只读层上加了一层可写层
仓库repository :集中存放镜像

docker命令:

搜索镜像:
#docker search centos
获取镜像:
#docker pull centos
列出本地镜像:
#docker images!
[root@instance-9sw700gb zxt]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              latest              1e1148e4cc2c        2 months ago        202MB

删除镜像:后面跟容器id
#docker rm cb9065df9d04  (若容器正在运行则需用docker stop 停止容器后再删除)
创建一个新的容器并运行命令
# docker run centos /bin/echo 'Hello World'
显示所有状态的容器:
# docker ps -a
显示当前正在运行的容器:
# docker ps
显示最后运行的那个容器:
# docker ps -l
启动容器:启动容器时若本地没有镜像,则会下载镜像然后启动
#docker run nginx
进入到docker容器中:
# docker run --name mydocker -it centos /bin/bash
--name指定容器名称
[root@instance-9sw700gb zxt]# docker run --name mydocker -it centos /bin/bash
[root@b3253b5fd19a /]# ls
anaconda-post.log  bin  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

启动一个容器并在后台运行:-d
# docker run -d --name mynginx nginx
[root@instance-9sw700gb zxt]# docker run -d --name mynginx nginx
93a665880926664788b2c727bd9a9552bed2a18173070fc974ec181afe71f1b4

进入到已经运行的容器中:attach、ncenter
方法一:
# docker attach 93a665880926  (并不好用)
方法二:ncenter命令   (yum install -y util-linux)
# docker inspect --format "{{.State.Pid}}" mynginx  (获取容器的pid)
80959
[root@instance-9sw700gb zxt]#  nsenter --target 80959 --mount --uts --ipc --net --pid
mesg: ttyname failed: No such file or directory
root@93a665880926:/#
root@93a665880926:/# cd /etc/nginx/
root@93a665880926:/etc/nginx# ls
conf.d  fastcgi_params  koi-utf  koi-win  mime.types  modules  nginx.conf  scgi_params  uwsgi_params  win-utf
编写进入容器的脚本:
[root@instance-9sw700gb zxt]# cat in.sh 
#!/bin/bash
CNAME=$1
CPID=$(docker inspect --format "{{.State.Pid}}" $CNAME)
nsenter --target 80959 --mount --uts --ipc --net --pid
[root@instance-9sw700gb zxt]# ./in.sh mynginx
mesg: ttyname failed: No such file or directory
root@93a665880926:/# 

docker的网络访问

[root@instance-9sw700gb zxt]# brctl show
bridge name bridge id                   STP enabled interfaces
docker0     8000.024201a2e27b   no              veth7006f1a
                                                             vethdcd7677
有一个docker0的网桥。


随机映射:
#docker run -P
[root@instance-9sw700gb zxt]# docker run -P -d --name mynginx1 nginx
e7657ad92b7e0838051577829fce54a66a314b4408d5ab937d10cf053a812ddf
[root@instance-9sw700gb zxt]# docker ps -l
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                   NAMES
e7657ad92b7e        nginx               "nginx -g 'daemon of…"   20 seconds ago      Up 19 seconds       0.0.0.0:32768->80/tcp   mynginx1
可以访问到容器中的端口:http://106.12.156.169:32768

指定映射:
# docker -p hostPort:containerPort
# docker -p ip:hostPort:containerPort
# docker -p ip::containerPort
[root@instance-9sw700gb zxt]# docker run -d -p 91:80 --name mynginx2 nginx
62c88fc93246586ba132df4cee803e01b0d346fe1446a2f843f1525635f9474c
可以访问到容器中的端口:http://106.12.156.169:91/

docker 的数据管理

数据卷:
-v /data
-v src:dst
[root@instance-9sw700gb zxt]# docker run -it --name volume-test1 -h centos -v /data centos
[root@centos /]# cd /data/
[root@centos data]# ll
total 0
(-h:设置主机名)

[root@instance-9sw700gb zxt]# docker run -it --name volume-test2 -h nginx -v /opt:/opt centos
[root@nginx /]# ls /opt/
avalokita  bcm-agent  containerd  hosteye  rh


数据卷容器
--volumes-
from
[root@instance-9sw700gb zxt]# docker run -it --name volume-test4 --volumes-from volume-test1 centos

镜像构建

手动构建:

[root@instance-9sw700gb docker]# docker pull centos
[root@instance-9sw700gb docker]# docker run --name nginx-man -it centos
[root@5041df20782e /]# yum install wget gcc gcc-c++ make openssl-devel
[root@5041df20782e /]# wget http://nginx.org/download/nginx-1.15.9.tar.gz
[root@5041df20782e /]# wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.43.tar.gz
[root@5041df20782e src]# mv nginx-1.15.9.tar.gz /usr/local/src/
[root@5041df20782e src]# mv pcre2-10.21.tar.gz /usr/local/src/
[root@5041df20782e src]# cd /usr/local/src/
[root@5041df20782e src]# tar zxvf nginx-1.15.9.tar.gz
[root@5041df20782e src]# tar zxvf pcre-8.43.tar.gz
[root@5041df20782e src]# useradd -s /sbin/nologin -M www   (-M不创建主目录)
[root@5041df20782e nginx-1.15.9]# ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --with-pcre=/usr/local/src/pcre-8.43
[root@f55c14cccea0 nginx-1.15.9]# make
[root@f55c14cccea0 nginx-1.15.9]# make install

[root@c0e86620ef81 /]# vi /etc/rc.local
/usr/local/nginx/sbin/nginx

配置nginx在前台运行:
[root@f55c14cccea0 nginx-1.15.9]# vi /usr/local/nginx/conf/nginx.conf
daemon off
[root@f55c14cccea0 nginx-1.15.9]# exit

构建镜像:
[root@instance-9sw700gb zxt]# docker commit -m "my nginx" f55c14cccea0 zhangxiaoteng/my-nginx:v1
sha256:71a5275be6500932226d444395ab84f22a952b1b6227d822430d9a89e5eb1d0d
[root@instance-9sw700gb zxt]# docker images
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
zhangxiaoteng/my-nginx   v1                  71a5275be650        53 seconds ago      429MB
构建了一个名字为zhangxiaoteng/my-nginx  tag是v1的镜像
将自己构建的镜像运行起来:
[root@instance-9sw700gb zxt]# docker run -d -p92:80 zhangxiaoteng/my-nginx:v1
ba7a3610a27a0e7d8ea8332f415bfa1419373a6a03a64962ce863fbdd9da43dd
[root@instance-9sw700gb zxt]# docker ps -l
CONTAINER ID        IMAGE                       COMMAND             CREATED             STATUS                     PORTS               NAMES
ba7a3610a27a        zhangxiaoteng/my-nginx:v1   "/bin/bash"         9 seconds ago       Exited (0) 8 seconds ago                       naughty_matsumoto
注意:
出现了一个问题,通过 docker ps -l查看得知这个镜像启动后就退出了,说明镜像中nginx自启动设置的不正确,rc.local中设置的有问题,将rc.local中的/usr/local/nginx/sbin/nginx删除
[root@instance-9sw700gb zxt]# docker run -it zhangxiaoteng/my-nginx:v1
[root@c0e86620ef81 /]# vi /etc/rc.local 
[root@c0e86620ef81 /]# exit
[[root@instance-9sw700gb zxt]# docker ps -l
CONTAINER ID        IMAGE                       COMMAND             CREATED             STATUS                     PORTS               NAMES
85b08a73eee5        zhangxiaoteng/my-nginx:v3   "/bin/bash"         30 seconds ago      Exited (0) 3 seconds ago                       laughing_mclaren
[root@instance-9sw700gb zxt]# docker commit -m "v4" 85b08a73eee5 zhangxiaoteng/my-nginx:v4
sha256:5e1ddba6e55bf18386ab57484c4f2c3afcad5c2d5a533b0bfeed4ea0467fe89a
[root@instance-9sw700gb zxt]# docker images
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
zhangxiaoteng/my-nginx   v4                  5e1ddba6e55b        6 seconds ago       429MB
zhangxiaoteng/my-nginx   v3                  837816fa3efb        14 minutes ago      429MB
zhangxiaoteng/my-nginx   v2                  740cf0ad5ae6        21 minutes ago      429MB
zhangxiaoteng/my-nginx   v1                  71a5275be650        32 minutes ago      429MB
[root@instance-9sw700gb zxt]# docker run -d -p 99:80 zhangxiaoteng/my-nginx:v4 /usr/local/nginx/sbin/nginx
015de6db9d839b23385cd6534071ef24d314e5d38b7510130986b3bc28447492
[root@instance-9sw700gb zxt]# docker run -d -p 99:80 zhangxiaoteng/my-nginx:v4 /usr/local/nginx/sbin/nginx
015de6db9d839b23385cd6534071ef24d314e5d38b7510130986b3bc28447492
[root@instance-9sw700gb zxt]# docker ps -l
CONTAINER ID        IMAGE                       COMMAND                  CREATED             STATUS              PORTS                NAMES
015de6db9d83        zhangxiaoteng/my-nginx:v4   "/usr/local/nginx/sb…"   6 seconds ago       Up 5 seconds        0.0.0.0:99->80/tcp   loving_borg
检测访问nginx:http://106.12.156.169:99/

Dockerfile构建:

  • 基础镜像信息
  • 维护者信息
  • 镜像操作指令
  • 容器启动时执行指令


    图片.png
[root@instance-9sw700gb nginx]# pwd
/data/zxt/docker-file/nginx
[root@instance-9sw700gb nginx]# vim Dockerfile
# This is my first dockerfile
# Version 1.0
# Author: ZXT

#Base images
FROM centos
MAINTAINER zxt
ADD pcre-8.43.tar.gz /usr/local/src
ADD nginx-1.15.9.tar.gz /usr/local/src
RUN yum install -y wget gcc gcc-c++ make openssl-devel
RUN useradd -s /sbin/nologin -M www
WORKDIR /usr/local/src/nginx-1.15.9
RUN ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --with-pcre=/usr/local/src/pcre-8.43 && make && make install
RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf
ENV PATH /usr/local/nginx/sbin:$PATH
EXPOSE 80
CMD ["nginx"]
[root@instance-9sw700gb nginx]# docker build -t nginx-file:v1 /data/zxt/docker-file/nginx/
[root@instance-9sw700gb nginx]# docker images
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
nginx-file               v1                  6b63353a090b        11 seconds ago      426MB
运行这个刚刚用dockerfile构建的镜像:
[root@instance-9sw700gb nginx]# docker run -d -p 98:80 nginx-file:v1 /usr/local/nginx/sbin/nginx
edf652db0ab0de69e9003945d225998b2f0ae46a91e564e06cec791ed2829eaf
[root@instance-9sw700gb nginx]# docker ps -l
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
edf652db0ab0        nginx-file:v1       "/usr/local/nginx/sb…"   6 seconds ago       Up 5 seconds        0.0.0.0:98->80/tcp   vibrant_swirles
测试:http://106.12.156.169:98/


docker核心原理--资源隔离和限制

  • 资源隔离
    LXC Kernel namespace
    pid
    net
    ipc
    mnt
    uts
    user

  • 资源限制:cgroup
    CPU
    内存
    压力测试:stress

http://mirrors.aliyun.com/repo/
[root@instance-9sw700gb stress]# pwd
/data/zxt/docker-file/stress
[root@instance-9sw700gb stress]# wget http://mirrors.aliyun.com/repo/epel-6.repo
[root@instance-9sw700gb stress]# vim Dockerfile
FROM centos
ADD epel-6.repo /etc/yum.repos.d
RUN yum -y install stress && yum clean all
ENTRYPOINT ["stress"]
[root@instance-9sw700gb stress]# docker build -t stress .
[root@instance-9sw700gb stress]# docker images
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
stress                   latest              6ede6b8f8c16        5 seconds ago       225MB
nginx-file               v1                  6b63353a090b        21 hours ago        426MB

[root@instance-9sw700gb ~]# docker run -it --rm stress --cpu 1
(启动一个压力测试的容器,占用一个cpu
容器退出之后自动删除)
[root@instance-9sw700gb ~]# docker run -it --rm -c 512 stress --cpu 1
[-c参数指定CPU配额,默认每个容器有1024的配额]

-m参数限制docker容器只能使用128m的内存:
[root@instance-9sw700gb ~]# docker run -it --rm -m 128m stress --vm 1 --vm-bytes 120m --vm-hang 0
[root@instance-9sw700gb ~]# docker ps -l
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
8ce47201f85d        stress              "stress --vm 1 --vm-…"   22 seconds ago      Up 21 seconds                           sad_hodgkin


图片.png

docker的核心原理--网络和registry

默认是桥接模式bridge


图片.png

图片.png

图片.png

查看docker0的虚拟网桥:
[root@instance-9sw700gb ~]# brctl show
bridge name bridge id STP enabled interfaces
docker0 8000.024201a2e27b no veth7006f1a
veth71ecf6e
veth78cabb9
vethb20623e
vethdcd7677
vethf5b0255


docker-compose

docker私有仓库

[root@instance-9sw700gb ~]# docker pull registry
[root@instance-9sw700gb ~]# docker images
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
stress                   latest              6ede6b8f8c16        43 minutes ago      225MB
nginx-file               v1                  6b63353a090b        21 hours ago        426MB
zhangxiaoteng/my-nginx   v4                  5e1ddba6e55b        25 hours ago        429MB
zhangxiaoteng/my-nginx   v3                  837816fa3efb        25 hours ago        429MB
zhangxiaoteng/my-nginx   v2                  740cf0ad5ae6        25 hours ago        429MB
zhangxiaoteng/my-nginx   v1                  71a5275be650        25 hours ago        429MB
nginx                    latest              8c9ca4d17702        5 days ago          109MB
mysql                    latest              81f094a7e4cc        3 weeks ago         477MB
registry                 latest              d0eed8dad114        4 weeks ago         25.8MB
启动docker私有仓库:
[root@instance-9sw700gb ~]# docker run -d -p 5001:5000 registry
54e13568020ac345453d773a026e5ace93830c36b319f2a35275bdfc0e1b80ad
[root@instance-9sw700gb ~]# docker ps -l
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
54e13568020a        registry            "/entrypoint.sh /etc…"   11 seconds ago      Up 10 seconds       0.0.0.0:5001->5000/tcp   heuristic_minsky


打包一个镜像传到私有仓库中:
[root@instance-9sw700gb ~]# docker images
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
stress                   latest              6ede6b8f8c16        About an hour ago   225MB
nginx-file               v1                  6b63353a090b        21 hours ago        426MB
zhangxiaoteng/my-nginx   v4                  5e1ddba6e55b        25 hours ago        429MB
zhangxiaoteng/my-nginx   v3                  837816fa3efb        25 hours ago        429MB
zhangxiaoteng/my-nginx   v2                  740cf0ad5ae6        25 hours ago        429MB
zhangxiaoteng/my-nginx   v1                  71a5275be650        25 hours ago        429MB
nginx                    latest              8c9ca4d17702        5 days ago          109MB
mysql                    latest              81f094a7e4cc        3 weeks ago         477MB
registry                 latest              d0eed8dad114        4 weeks ago         25.8MB
打包nginx-file:v1镜像命名为mynginx-file:v1到私库中:
[root@instance-9sw700gb ~]# docker tag nginx-file:v1 106.12.156.169:5001/test/mynginx-file:v1
[root@instance-9sw700gb ~]# docker images
REPOSITORY                              TAG                 IMAGE ID            CREATED             SIZE
stress                                  latest              6ede6b8f8c16        About an hour ago   225MB
106.12.156.169:5001/test/mynginx-file   v1                  6b63353a090b        22 hours ago        426MB
nginx-file                              v1                  6b63353a090b        22 hours ago        426MB
zhangxiaoteng/my-nginx                  v4                  5e1ddba6e55b        25 hours ago        429MB
zhangxiaoteng/my-nginx                  v3                  837816fa3efb        25 hours ago        429MB
zhangxiaoteng/my-nginx                  v2                  740cf0ad5ae6        25 hours ago        429MB
zhangxiaoteng/my-nginx                  v1                  71a5275be650        26 hours ago        429MB
nginx                                   latest              8c9ca4d17702        5 days ago          109MB
mysql                                   latest              81f094a7e4cc        3 weeks ago         477MB
registry                                latest              d0eed8dad114        4 weeks ago         25.8MB
[root@instance-9sw700gb ~]# docker push 106.12.156.169:5001/test/mynginx-file:v1
The push refers to repository [106.12.156.169:5001/test/mynginx-file]
Get https://106.12.156.169:5001/v2/: http: server gave HTTP response to HTTPS client
报错:
解决:
[root@instance-9sw700gb ~]# echo '{ "insecure-registries":["106.12.156.169:5001"] }' > /etc/docker/daemon.json
[root@instance-9sw700gb ~]# systemctl stop docker
[root@instance-9sw700gb ~]# systemctl start docker.service
[root@instance-9sw700gb ~]# docker run -d -p 5001:5000 registry
495990004d080c4ce0f054232376686f156b67c05014e658cd926ebd67b09ee2
[root@instance-9sw700gb ~]# docker ps -l
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
495990004d08        registry            "/entrypoint.sh /etc…"   4 seconds ago       Up 3 seconds        0.0.0.0:5001->5000/tcp   modest_grothendieck
[root@instance-9sw700gb ~]# docker push 106.12.156.169:5001/test/mynginx-file:v1
The push refers to repository [106.12.156.169:5001/test/mynginx-file]
59e5eacdec8a: Pushed 
4568f66cb1f4: Pushed 
39b1bd831116: Pushed 
87818500728d: Pushed 
bcdaebad2cd2: Pushed 
c36ccdbeb957: Pushed 
071d8bd76517: Pushed 
v1: digest: sha256:e66476f76e97f3a0d29c9f4858d7d0e5fc22931f9e201a883888431e15eb5a89 size: 1791













最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,482评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,377评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,762评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,273评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,289评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,046评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,351评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,988评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,476评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,948评论 2 324
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,064评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,712评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,261评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,264评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,486评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,511评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,802评论 2 345

推荐阅读更多精彩内容

  • 一、Docker 简介 Docker 两个主要部件:Docker: 开源的容器虚拟化平台Docker Hub: 用...
    R_X阅读 4,379评论 0 27
  • 写这篇文章主要是为了今后毕业论文素材上的整理,同时对docker进行巩固温习。大纲: docker简介docker...
    胡图仙人阅读 7,394评论 2 96
  • 一、Docker容器概述 1、docker中的容器技术演进 lxc --> libcontainer --> ru...
    任总阅读 3,915评论 0 26
  • Docker入门 Docker命令官方示例 [toc] 1. Docker架构 1.1 Docker镜像与Dock...
    CaiGuangyin阅读 1,835评论 2 6
  • 萧红家原是一个小地主,随着祖父的逝世,家道衰落。她由于某种原因离家。她与丈夫郎华居住在哈尔滨,她虽满腹诗书,技艺加...
    jscfc阅读 753评论 0 0