Docker 改变了什么?

1.简化配置

2.流水线管理

3.应用隔离

4.提高开发效率

5.快速部署

6.面向产品:产品交付

7.面向开发:简化环境配置

8.面向测试:多版本测试

9.面向运维:环境一致性

10.面向架构:自动化扩容(微服务)

1.安装、启动

yum -y install docker
systemctl start docker

2.第三方仓库加速配置

https://cr.console.aliyun.com

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

ExecStart=/usr/bin/dockerd‐current ‐‐registry-mirror=https://a14c78qe.mirror.aliyuncs.com \

#更换存储目录
‐‐graph=/data/docker \

#dns服务默认docker是采用宿主机的dns
#可以采用如下设定
‐‐dns=192.16x.xx.xx \

#重载配置并重启
systemctl daemon‐reload
systemctl docker restart

docker daemon ‐‐help 这里可以查看到所有支持的参数

3.简单操作

ctrl+PQ  保存容器退出

#帮助
docker --hlep
docker deamon --help

#查看镜像
docker images  

#查看镜像环境

docker image inspect xxx

#搜索镜像
docker search centos  

#下载镜像
docker pull docker.io/centos

#导出镜像
docker save centeos >/tmp/centos.tar.gz

#导入镜像
docker load --input centos.tar
docker load centos.tar

#删除镜像
docker rmi 镜像ID(IMAGE ID)

#删除容器
docker rm mydocker
docker rm -f mydocker(删除正在运行的容器)
docker run --rm centos /bin/echo "hehe"  运行后删除容器

#启动容器
docker run centos /bin/echo 'Hello world'
docker start mydocker   

#显示镜像状态
docker ps -a 

#更改名称
docker run --name mydocker -t -i centos /bin/bash

#后台运行容器
docker run -d -P nginx

#查看容器访问日志
docker logs e6b599b46241
docker logs mydocker

#查看容器映射的端口
docker port mydocker

#数据卷
docker run -d --name test1 -v /data nginx
docker inspect -f {{.Mounts}} mynginx ##查找上面方法,默认挂载的位置
-v src:dst          #源:目的
-v src:dst:ro       #加ro 为只读

#挂载单文件
-v srcfile:dstfile  #源文件:目的文件

--volumes-from      
docker run -d --name test2 --volumes-from test1 cenos /bin/bash
#数据卷容器。让此数据卷在多个容器之间共享,test1为已经挂载数据卷的容器名。

#结束正在运行的所有容器
docker kill $(docker ps -a -q) 

#删除所有容器
docker rm $(docker ps -a -q)

4.进入容器

方法1

docker attach mydocker

方法2(执行命令返回结果)

docker exec -it mydocker /bin/bash
docker exec mydocker whoami

方法3

[root@cen7zc ~]# docker inspect --help
[root@cen7zc ~]# docker inspect -f "{{ .State.Pid}}" mydocker
3729
[root@cen7zc ~]# yum install -y util-linux
[root@cen7zc ~]# nsenter --help
[root@cen7zc ~]# nsenter -t 3729 -m -u -i -n -p
[root@cen7zc ~]# nsenter --target 3729 --mount --uts --ipc --net --pid

脚本

#!/bin/bash
docker_in(){
    NAME_ID=$1
    PID=$(docker inspect -f "{{ .State.Pid}}" $NAME_ID)
    nsenter -t $PID -m -u -i -n -p
}
docker_in $1

5.网络访问

随机映射

docker run -P

指定映射

-p hostPort:containerPort
-p ip:hostPort:containerPort
-p hostPort:containerPort:udp
-p 81:80 -p 443:443 
docker run -d -p 192.168.1.253:81:80 nginx

6、容器间互联

方法1

docker --name web2 --link web1  -d -p 8080:80 mynginx nginx   
docker exec -it web2 sh   
cat /etc/hosts  #查看    
docker inspect web1   # 查看容器信息

方法2

docker -d --name web2 --link web1:shop_web   -p 8080:80 mynginx nginx
cat /etc/hosts  #查看 有变化,shop_web为别名

7.手动构建容器

[root@cen7zc ~]# docker run --name mynginx -it centos

rpm -ivh https://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
yum install -y nginx
vi /etc/nginx/nginx.conf
daemon off;
exit

[root@cen7zc ~]# docker ps -a
148aca4d9f2e

保存镜像

[root@cen7zc ~]# docker commit -m "My-Nginx" 148aca4d9f2e qinzc/mynginx:v1
[root@cen7zc ~]# docker images
REPOSITORY  TAG IMAGE IDCREATED SIZE
qinzc/mynginxv1  aa99e9d583273 minutes ago   408 MB
docker.io/nginx latest  bc26f1ed35cf23 hours ago109 MB
docker.io/centoslatest  5182e96772bf7 weeks ago 200 MB

启动构建好的容器

docker run --name test1 -d -p 80:80 qinzc/mynginx:v1  nginx
#yum 安装的nginx,log在 /var/log/nginx/acclog.log

8.自动构建容器

[root@cen7zc nginx]# pwd
/opt/dockerfile/nginx
[root@cen7zc nginx]# vim Dockerfile

Dockerfile文件如下:

#This Dockerfile
#Base image
FROM centos

#Maintainer
MAINTAINER Zicheng.Qin 542129333@qq.com

#Commands
RUN rpm -ivh https://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
RUN yum -y install nginx && yum clean all
RUN echo "daemon off;" >> /etc/nginx/nginx.conf
ADD index.html /user/share/nginx/html/index.html
EXPOSE 80
CMD ["nginx"]

开始构建

[root@cen7zc nginx]# echo "nginx in docker,hahah" > index.html 
[root@cen7zc nginx]# docker build -t qinzc/test:v2 .

启动

docker run --rm --name mynginxtest -d -p 80:80 test:v2

基于Centos的SSH例子

# Docker for CentOS
#Base image
FROM centos

#Who
MAINTAINER zicheng.Qin xxx@gmail.com

#EPEL
ADD epel.repo /etc/yum.repos.d/

#Base pkg
RUN yum install -y openssh-clients openssl-devel openssh-server wget mysql-devel supervisor git redis tree net-tools sudo psmisc && yum clean all

# For SSHD
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
RUN ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key
RUN echo "root:oldboy" | chpasswd

9.简单操作实战

1.运行centos容器:docker run

2.启动名为:mydocker

3.分配一个伪终端:-t

4.标准输入输出:-i

5.执行的命令:/bin/bash

6.退出容器:exti

docker run --name mydocker -t -i centos /bin/bash

查看容器运行状态

docker ps -a

再次进入容器

docker start mydocker

后台运行容器,显示容器ID

docker run -d nginx

跨主机网络实现,业界流行常用方法,overlay驱动

http://vmware.github.io/harbor/index_cn.html

https://github.com/vmware/harbor