Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后公布到任何盛行的 Linux 机械上,也可以实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iphone 的 app),更主的是容器性能开销极低。


实验环境

centos7.3_x64


实验软件

docker-1.13.1-162.git64e9980.el7.centos.x86_64


软件安装

cp -pv /etc/hosts /etc/hosts.bak

echo 192.168.10.14 docker > /etc/hosts

hostnamectl set-hostname docker

uname&NBsp; -sr         查看内核版本

Linux 3.10.0-514.el7.x86_64


yum install -y axel vim lsof ntp curl psmisc bind-utils ifTOP  

yum install -y yum-utils device-mapper-persistent-data lvm2 bridge-utils device-mapper docker-ce

systemctl stop firewalld.service && systemctl disABLe firewalld.service

systemctl stop NetworkManager  && systemctl disable NetworkManager

echo SELINUX=disabled > /etc/sysconfig/selinux

systemctl daemon-reload && systemctl   start docker && systemctl enable docker

docker --version

Docker version 19.03.12, build 48a66213fe


cat /etc/docker/daemon.json    设置docker镜像加速

{

  "registry-mirrors": ["https://m1sc70wl.mirror.aliyuncs.com"]

}


镜像治理

docker search -s300 tomcat                                              搜索镜像

INDEX       NAME                       DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED

docker.io   docker.io/tomcat           Apache Tomcat is an open source implementa...   2775      [OK]

docker pull tomcat                                                      下载镜像

docker images                                                           查看可用镜像

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

tomcat              latest              6055d4d564e1        5 days ago          647MB

centos              latest              831691599b88        3 weeks ago         215MB

mysql               latest              be0dbf01a0f3        4 weeks ago         541MB

docker RMi -f docker.io/centos                                          删除单个镜像 -f为强制

docker rmi -f $(docker images -qa)                                   删除多个镜像 

docker sAVe -o /root/mysql.tar.gz   mysql                         保留镜像

docker load < /root/mysql.tar.gz                                      导入镜像


容器治理

docker run -it centos /bin/bash                                    启动容器 容器名字 id均可

docker run -it --name centos11 centos                              启动容器 从命名

docker run -itd -p 888:80 nginx                                    启动镜像映射端口 -p制订端口 -P为随机端口 -d后台启动

docker ps | grep nginx

52642942cf7e        nginx               "/docker-entrypoint.…"   About a minute ago   Up About a minute   0.0.0.0:888->80/tcp      suspicious_lamport

docker exec -t 52642942cf7e curl http://localhost/index.html | grep Welcome   

<title>Welcome to nginx!</title>


exit/ctl+q+p                                                       exit住手退出 ctrl+q+p 不住手退出

docker inspect  mysql                                              查看容器结构

                                        

docker ps

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

e95d4df37d2f        centos              "/bin/bash"         17 seconds ago      Up 16 


docker start/restart/stop e95d4df37d2f        启动/重启/住手容器  容器id

docker attach e95d4df37d2f                     未住手容器 重新进入

docker exec -t f3d96985d10b uname -a            容器外执行命令

Linux f3d96985d10b 3.10.0-514.el7.x86_64 #1 SMP Tue Nov 22 16:42:41 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

docker cp f3d96985d10b:/tmp/ks-script-585nin8f /root  复制容器文件到宿主机

docker  kill  e95d4df37d2f                     强制关闭容器

docker  rm    e95d4df37d2f                     删除容器


自定义dockerfile

mkdir -pv /var/docker

mkdir -pv /var/docker/redis

touch /var/docker/redis/Dockerfile


cat /var/docker/redis/Dockerfile 

FROM centos:7.5.1804

MAINTAINER 115946156@qq.com

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime


RUN yum -y install epel-release && yum -y install redis  && yum install -y net-tools


EXPOSE 6379


RUN yum clean all


RUN sed -i.bak -e 's@bind 127.0.0.1@bind 0.0.0.0@g' /etc/redis.conf

RUN echo "requirepass 123456" >> /etc/redis.conf


ENTRYPOINT [ "/usr/bin/redis-server","/etc/redis.conf"]

CMD []

docker build -t redis .  构建镜像

docker run -itd -p 6333:6379 redis  运行镜像

docker save -o /root/redis.tar.gz redis  备份镜像到宿主机


docker images | grep redis

redis               latest              18f4ae439e80        About a minute ago   486MB

docker ps | grep redis

8bb366f62504        redis               "/usr/bin/redis-serv…"   About a minute ago   Up About a minute   0.0.0.0:6333->6379/tcp   zen_thompson


设置容器卷

docker images | grep centos

centos              latest              831691599b88        3 weeks ago         215MB

docker ps

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES

4c9434259ed0        centos:latest       "/bin/bash"         3 minutes ago       Up 3 minutes      


mkdir -pv /web/test &&  touch /web/test/aa.html    docker宿主机操作

docker run -it -v /web/test/:/var/www/html centos               -v 宿主机目录:容器目录  镜像名

touch /web/test/dd.html     dockr宿主机操作

docker exec -t 4c9434259ed0 ls -l /var/www/html | grep dd.html

-rw-r--r-- 1 root root 0 Jul 12 15:53 dd.html


docker network ls

NETWORK ID          NAME              DRIVER          SCOPE

78eeb0ba5619        bridge              bridge           local

a948abc2cc21        host                  host               local

bd0605474e74       none                 null                local


ip addr | grep docker0

docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN 

    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0


ps -ef | grep docker

root      13889      1  1 20:53 ?        00:00:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock