docker自己才能看懂的笔记

1.1 docker改名moby

1.2 安装

yum install –y docker

systemctl enable docker

  

1.3 修改源

vim /usr/lib/systemd/system/docker.service

 

源上阿里去https://cr.console.aliyun.com

ExecStart=/usr/bin/dockerd-current --registry-mirror=

systemctl daemon-reload

systemctl start docker

systemctl status docker

1.4 基础命令

docker pull alpine                  #  拉取镜像

docker search nginx                # 搜索镜像

docker pull docker.io/nginx          # nginx镜像

docker images                    # 查看本地镜像

docker save nginx > /tmp/nginx.tar.gz  # 导出

docker rmi nginx                  # 删除镜像

docker load < /tmp/nginx.tar.gz       # 导入

 

 

镜像位置/var/lib/docker/image/devicemapper/layerdb/

更换存储位置vim /usr/lib/systemd/system/docker.service

--graph=/opt/docker

dns服务

默认docker是采取宿主机dns

可以采用dns=xxxx的方式制定。

 

查看参数帮助

docker daemon –help

 

docker run apline sh   # 启动镜像

# run  = create + start

docker run –it apline sh   # 进行交互

docker ps              # 正在运行容器

键盘ctrl +p+q          # 推出时,保证容器继续运行,类似于screen 的 ctrl +a +d

docker ps –a           # 显示所有容器

docker rm  id          # 删除容器

docker rm 1526a29ab328 e895cb467506 2f07a0b8567c

docker rm -f 1526a29ab328 # -f 强制删除

docker run -it --name mynginx nginx    # 指定名字

docker inspect 142d3ffef2a7           # 查看详细信息

 

  

[root@linux-node1 ~]# docker ps

CONTAINER ID        IMAGE   COMMAND                  CREATED             STATUS              PORTS               NAMES

142d3ffef2a7        nginx   "nginx -g 'daemon off"   11 seconds ago      Up 10 seconds       80/tcp              mynginx

[root@linux-node1 ~]# docker inspect 142d3ffef2a7

 

docker run -it --rm --name mynginx nginx  # 退出容器删除容器(实验环境使用)

docker run -it --rm --name mynginx nginx sh # 进去交互界面

docker attach mynginx        # 进入容器一。没有分配bash终端,所有终端命令一起显示。比较坑

docker exec mynginx

docker exec -it mynginx  sh   # 进入容器二,  终端是独立。   推荐参数。其他少用。

 

  

 

 

yum install util-linux -y

[root@linux-node1 ~]# cat docker_in.sh

#!/bin/sh

pid=`docker inspect --format  "{{.State.Pid}}" $1`

nsenter -t $pid -m -u -i -n -p

 

sh docker_in.sh mynginx

docker run -it -d --name mynginx nginx  # 后台运行,于—rm参数有冲突

docker logs mynginx                 # 查看一条日志

docker logs -f mynginx               # 跟tailf效果一样。可以直接使用ctrl + c退出

docker kill

docker stop

 

  

1.5 镜像制作—镜像越小最好,少装包   简单方式

docker pull centos   # 下载centos镜像

docker run -it centos bash # 进容器

yum install wget –y        # 下载wget

# 修改yum源

yum install nginx

nginx 默认是后台运行的,docker不允许所以修改配置文件添加 vi /etc/nginx/nginx.conf

daemon off;

docker commit --help

制作镜像

docker commit -m 'add nginx images' romantic_williams ago/nginx

docker commit -m 'add nginx images' romantic_williams ago/nginx:v1   # 打标签tag

 

docker run -d --name ago_nginx  ago/nginx:v1 nginx      # 找v1镜像。不指定就是最后。

docker commit 容器 镜像名

 

http://hub.docker.com/ 镜像官网

docker login http://hub.docker.com/ # 登陆

docker images

docker tag “IMAGE ID” docker.io/用户登陆名/名字

docker push  docker.io/用户登陆名/名字            #

 

  

1.6 网络,端口映射

docker run -d --name agonginx -P nginx    # -P 做端口映射

[root@linux-node1 ~]#

[root@linux-node1 ~]# docker ps

CONTAINER ID   IMAGE    COMMAND                  CREATED              STATUS              PORTS                   NAMES

1d4c723fd548   nginx    "nginx -g 'daemon off"   About a minute ago   Up About a minute   0.0.0.0:32768->80/tcp   agonginx

cb322488f58b   centos   "bash"                   45 minutes ago       Up 45 minutes                               romantic_williams

bf87f4d14d3c   nginx    "nginx -g 'daemon off"   51 minutes ago       Up 51 minutes       80/tcp                  mynginx

指定端口

小p

docker run -d -p 8080:80  --name agonginx  nginx

# 前8080是宿主机的端口,也就是真实机。80是docker的端口,默认是tcp

docker run -d -p 8080:80/udp  --name agonginx  nginx  # 指定udp

docker run -it -d  -p 2222:22 -p 8888:80 -name centos centos bash # 指定多个端口

docker run -d -p 127.0.0.1:8080:80  --name agonginx  nginx

docker run -d -p 127.0.0.1::80  --name agonginx  nginx     随机端口

容器互联

docker run -d -p 80:80 --name web1 nginx

docker run --name web2 --link web1 -p 81:80 agonginx nginx   # 互联web1

 

[root@linux-node1 ~]# docker exec -it web2 bash

[root@b113ef47bbad /]# cd /etc/

[root@b113ef47bbad etc]# cat host

cat: host: No such file or directory

[root@b113ef47bbad etc]# cat hosts

127.0.0.1 localhost

::1   localhost ip6-localhost ip6-loopback

fe00::0   ip6-localnet

ff00::0   ip6-mcastprefix

ff02::1   ip6-allnodes

ff02::2   ip6-allrouters

172.17.0.2    ago_nginx b906470e6e16

172.17.0.3    b113ef47bbad

 

方法二

docker run -d -p 81:80 --name web2 --link ago_nginx:shop_web ago/nginx nginx   # 起别名

 

[root@linux-node1 ~]# docker exec -it web2 bash

[root@d714a188bd28 /]# cat etc/hosts

127.0.0.1 localhost

::1   localhost ip6-localhost ip6-loopback

fe00::0   ip6-localnet

ff00::0   ip6-mcastprefix

ff02::1   ip6-allnodes

ff02::2   ip6-allrouters

172.17.0.2    shop_web b906470e6e16 ago_nginx

172.17.0.3    d714a188bd28

 

 

docker network ls

[root@linux-node1 ~]# docker network ls

NETWORK ID          NAME                DRIVER              SCOPE

16e4d130d169        bridge              bridge              local              

1f2c0b5fb753        host                host                local              

bbebe8419703        none                null                local

 

 

[root@linux-node1 ~]# docker run --rm -it --net=host nginx

2017/08/21 14:29:06 [emerg] 1#1: bind() to 0.0.0.0:80 failed (98: Address already in use)

nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)

# 只有LO网卡

[root@linux-node1 ~]# docker run -it --rm --net=none alpine sh

/ # ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN

    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

    inet 127.0.0.1/8 scope host lo

       valid_lft forever preferred_lft forever

    inet6 ::1/128 scope host

       valid_lft forever preferred_lft forever

 

  

 

1.7 跨主机互联

两个网段配置。

node1

修改配置文件--bip=172.18.42.1/16  添加这句  默认就是172.17   所以改成别的网段

vi /usr/lib/systemd/system/docker.service

ExecStart=/usr/bin/dockerd-current --registry-mirror=https://u81vsg0g.mirror.aliyuncs.com --bip=172.18.42.1/16

systemctl daemon-reload

systemctl restart docker

 

 

 

node2

vi /usr/lib/systemd/system/docker.service

ExecStart=/usr/bin/dockerd-current --registry-mirror=https://u81vsg0g.mirror.aliyuncs.com --bip=172.18.42.1/16 \

 

 

 

互相ping,在宿主机即可。

ping 192.168.56.11

ping 192.168.56.12

 

启动docker容器

docker run -it --name node1 centos bash

docker run -it --name node2 centos bash

 

 

同时安装 yum install net-tools -y

 

因为虚拟机原因,可能一开始就会ping通

 

 

在宿主机添加路由,进行访问

route add -net 172.18.0.1/16 gw 192.168.56.11

 

抓包看看

tcpdump -i eth0 -vnn icmp

tcpdump -i docker0 -vnn icmp

 

 

1.8 数据管理

挂载

数据卷

docker rm -fv 容器名      # v 才会一起删除数据卷

docker run -it --name node1 --rm -v /data centos bash    

[root@603ab5d521d8 ~]#

[root@603ab5d521d8 ~]# df -h

Filesystem                       Size  Used Avail Use% Mounted on

/dev/mapper/docker-8:3-34326325-4722a2e7b0560a72ad…   10G  236M  9.8G   3% /

tmpfs                                                  493M     0  493M   0% /dev

tmpfs                                                  493M     0  493M   0% /sys/fs/cgroup

/dev/sda3                                              18G  2.3G   16G  13% /data

shm                                                    64M     0   64M   0% /dev/shm

 

docker run -it --name node1 --rm -v /data:/opt centos bash    # 前面是宿主机,后面是虚拟机

利用jenkins 可以直接推送过来。推送到/data下。

docker run -it --name node1 --rm -v /data/hosts:/opt/hosts centos bash  # 文件的挂在尽可能不修改 文件,可能会修改inode号。

docker run -it --name node1 --rm -v /data/hosts:/opt/hosts:ro centos bash  # 只读

 

docker run -it --name node01 --volumes-from node1 centos bash        # 数据卷来自于谁。数据卷可以不启动虚拟机。

 

用 v 参数启动的。尽量用v参数删除。不然数据会一直增加。(自己测试一下。)

 

1.9 docker_file  文件名必须Dockerfile

[root@linux-node1 ~]# mkdir docker

[root@linux-node1 ~]# cd docker/

[root@linux-node1 docker]# touch Dockerfile

[root@linux-node1 docker]# vim Dockerfile

[root@linux-node1 docker]# cat Dockerfile

#This is dockerfile for nginx

# 基于什么镜像

FROM centos

# 维护者信息

MAINTAINER ago ago@163.com

# 相关操作

# 下载epel源 装包越少越好

RUN rpm -ivh https://mirrors.aliyun.com/epel/7/x86_64/e/epel-release-7-10.noarch.rpm

# 坚决不能有交互

RUN yum install nginx -y

# 添加文件

# 前面是宿主机路径文件,后者是虚拟机路径

ADD index.html /usr/share/nginx/html/index.html

# 参数添加

RUN echo "daemon off;" >> /etc/nginx/nginx.conf

# 设置开放端口

EXPOSE 80

# 执行命令

CMD ["nginx"]

docker build -t ago/nginx /root/docker/   # docker构建也有缓存

docker images                      # 查看镜像

docker run -it --rm ago/nginx nginx     # 启动测试

 

1.10 私有库  最简单的搭建方法

docker pull registry

 

cd /opt

mkdir auth

docker run --entrypoint htpasswd registry -Bbn agocan 123456 > auth/htpasswd

docker run -d -p 6000:5000 --restart=always --name registry1 \

-v `pwd`/auth:/auth \

-e "REGISTRY_AUTH=htpasswd" \

-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \

-e REGISTRY_AUTH_HTTPSSWD_PATH=/auth/htpasswd \

registry

 

报错:

Error response from daemon: Get http://127.0.0.1:6000/v1/users/: read tcp 127.0.0.1:42430->127.0.0.1:6000: \
read: connection reset by peer
上传镜像 docker tag 镜像ID 127.0.0.1:6000/ago/nginx docker push 127.0.0.1:6000/ago/nginx docker pull 127.0.0.1:6000/ago/nginx

 

 

1.11 docker容器编排

单机编排工具

yum install python-pip -y

pip install docker-compose

[root@linux-node1 opt]# docker-compose -v

docker-compose version 1.15.0, build e12f3b9

[root@linux-node1 opt]# docker-compose version

docker-compose version 1.15.0, build e12f3b9

docker-py version: 2.5.0

CPython version: 2.7.5

OpenSSL version: OpenSSL 1.0.1e-fips 11 Feb 2013

 

[root@linux-node1 compose]# vim docker-compose.yml

 

web1:

  image: nginx

  expose:

    - 80

 

web2:

  image: nginx

  expose:

    - 80

 

haproxy:

  image: haproxy

  volumes:

    - /opt/haproxy.cfg:/usr/local/haproxy/haproxy.cfg

  links:

    - web1

    - web2

  ports:

    - "7777:1080"

    - "80:80"

 

docker-compose -d up

 

可以安装supervisor

 

 

 

1.12 docker安装nginx+uwsgi+python3.6

docker -it --name centos -p 8888:80 -p 2222:22  centos bash

yum install -y epel-release

yum install -y wget

yum install gcc gcc-c++ -y

 

posted @ 2017-08-29 14:27  汉克书  阅读(600)  评论(0编辑  收藏  举报