Docker
Docker是通过内核虚拟化技术实现的,来提供容器的资源隔离和安全保障等。
基于Go语言
Docker.com 官网
docker的管理工具:swarm,mesos,k8s,kubernetes


生产环境:
1.规划
2.基础镜像,centos,yum install wget

Docker组成:
Docker Client
Docker Server


Docker组件
镜像 Image
容器 Container
仓库 Repository


docker中国站点镜像加速https://www.docker-cn.com/registry-mirror


安装Docker 
yum install -y docker
service docker start


docker images 查看docker镜像


docker pull centos 下载一个centos镜像


docker save centos > /opt/centos.tar.gz   将centos导出,一般用于转移
 
docker load < /opt/centos.tar.gz      镜像的导入


如果镜像创建容器,是不能被删除的


docker rm (IMAGE ID) 删除docker


测试运行docker(前提是有镜像)


docker run centos /bin/echo "hehe"


docker run -help 查看运行帮助


docker ps -a 查看正在运行的镜像


docker run --name mydocker -t -i centos /bin/bash   
--name起一个名字  
-t是分配一个登录终端  
-i是这个容器保持打开
-t才可以登录  
/bin/bash 是执行这个命令




docker search 搜索镜像


docker pull 获取镜像


docker images 查看镜像


docker rm 删除镜像


netstat -ntlp | grep docker  筛选出docker的网络进程


启动容器
docker run --name -h hostname


docker start 7f72d290fe1e


停止容器
docker stop 7f72d290fe1e


安装的插件可以让docker后台运行
nsenter 
如果没有按照则执行
yum install util-linux


查看容器
docker ps -a -l


获取进程:
docker start 7f72d290fe1e
docker inspect --format "{{.State.Pid}}" 7f72d290fe1e
如果是0的话没有启动,正常启动的话会有ID
nsenter -t 19702 -u -i -n -p     19702是进程
这时exit退出,docker ps 还会看到个的进程在运行 


nsenter --help  查看运行帮助
Options:
 -t, --target <pid>     target process to get namespaces from
 -m, --mount[=<file>]   enter mount namespace
 -u, --uts[=<file>]     enter UTS namespace (hostname etc)
 -i, --ipc[=<file>]     enter System V IPC namespace
 -n, --net[=<file>]     enter network namespace
 -p, --pid[=<file>]     enter pid namespace
 -U, --user[=<file>]    enter user namespace
 -S, --setuid <uid>     set uid in entered namespace
 -G, --setgid <gid>     set gid in entered namespace
     --preserve-credentials do not touch uids or gids
 -r, --root[=<dir>]     set the root directory
 -w, --wd[=<dir>]       set the working directory
 -F, --no-fork          do not fork before exec'ing <program>
 -Z, --follow-context   set SELinux context according to --target PID


 -h, --help     display this help and exit
 -V, --version  output version information and exit




进入容器
docker exec | docker attach


删除容器
docker rm 3172730eb009
删除一个正在运行的容器(不建议)
docker rm -f 3172730eb009


容器运行完成后自动删除
docker run --rm centos /bin/echo "haha"


查看:docker ps -a


查看正在运行的docker
docker ps -a -q


docker logs 0854ccf5ad7a
查看docker logs 日志,后面跟id


退出所有正在运行的docker(生产时候不能用)
docker kill $(docker ps -a)


列出当前运行的docker ID
docker ps -a -q


docker挂载文件
docker run -it -v /opt:/opt:/opt centos


自己制作docker镜像
1,首先有基础镜像
docker pull centos
2,docker run --name mynginx -it centos
这个仓库的名字是mynginx 实在centos基础上,在直接进入仓库
3,安装nginx
4,退出docker后
docker ps -a  
查看mynginx是否在运行
5,打包镜像
docker commit -m "my nginx" 8439894432 oldboyedu/mynginx:v1
输出一串字符
oldboyedu/mynginx    oldboyedu是用户名,可以自定义
6,进入自己的打包




docker run -it --name nginxv1 oldboyedu/mynginx:v1
docker commit -m "my nginx" a437e5926962 oldboyedu/mynginx:v1
生成:sha256:44f08b39fa4d8d86ad8f3144d3c78a0437459f4a5d354845f3b36bed470031a2
这时候输入docker images 会发现自己生成的镜像
注意:docker ps -a
CONTAINER ID        IMAGE                  COMMAND                  CREATED              STATUS                         PORTS               NAMES
0d86a0ddb862        oldboyedu/mynginx:v1   "/bin/bash"              About a minute ago   Exited (0) 7 seconds ago                           nginxv1
docker run -it --name nginxv1 oldboyedu/mynginx:v1
docker start  0d86a0ddb862
docker attach 0d86a0ddb862
https://opsx.alibaba.com/mirror
https://mirrors.aliyun.com/epel/
下载:https://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
执行:rpm -ivh https://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
yum install -y nginx
vi /etc/nginx/nginx.conf
添加:nginx设置  daemon off;
exit
docker ps -a
CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS                         PORTS               NAMES
0d86a0ddb862        oldboyedu/mynginx:v1   "/bin/bash"              5 minutes ago       Exited (0) 3 seconds ago                           nginxv1
生成v2
docker commit -m "mynginx" 0d86a0ddb862 oldboyedu/mynginx:v2
sha256:cfdcce95fa69eb148c320f079c29b2204e7c5f85fad601f900ea5e12a2d5c93b
[root@iZm5e5ynf23pd7w4j5ie7xZ docker]# docker images
REPOSITORY                                  TAG                 IMAGE ID            CREATED             SIZE
oldboyedu/mynginx                           v2                  cfdcce95fa69        8 seconds ago       358 MB
oldboyedu/mynginx                           v1                  44f08b39fa4d        13 minutes ago      358 MB
docker run -d -p 90:80 oldboyedu/mynginx:v2 nginx   (-d 后台,-p指定端口 nginx是命令)
686f252703d4cc686902eacefa4e8438a183f2f5d06fb035c820a2efa2ee5f17
控制面板开放端口90端口
访问:ip:90 就可以打开nginx页面




netstat -ntl  
查看网络端口映射


docker run -it --name volume-test1 -v /data centos
docker inspect 544d36dec210    查看挂载信息
"Mounts": [
            {
                "Type": "volume",
                "Name": "84e4c89134c8e1275c6a8dde1fcea544cefbfe510a8bdc17934e0592273da346",
                "Source": "/var/lib/docker/volumes/84e4c89134c8e1275c6a8dde1fcea544cefbfe510a8bdc17934e0592273da346/_data",   //挂载到主机节点
                "Destination": "/data",  //目录
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }


进入/var/lib/docker/volumes/84e4c89134c8e1275c6a8dde1fcea544cefbfe510a8bdc17934e0592273da346/_data 目录
创建touch 123
这时候在容器查看 :ls -l /data
也会生成:123


常用docker与主机文件输出
docker run -it --name volume-test1 -v /data centos  将文件夹共享到主机
docker run -it -v /opt:/opt centos   直接挂载目录方式


数据卷容器:一个docker访问另外一个docker的文件
docker run -d --name nfs -v /data centos   //创建nfs的容器
docker run -it --name test1 --volumes-from nfs centos //创建一个test1的容器,自动进入,使用nfs里面的卷




Dockerfile构建容器


基础镜像信息
维护者信息
镜像操作指令
容器启动时执行指令
1,docker build /opt/nginx/Dockerfile   注意大写


#This docker file
#VERSION 1
#Author:Jesse
#Base image
FROM centos
#Maintainer
MAINTAINER jesse.Hao lampjesse@163.com
#Commands
RUN rpm  -ivh https://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
RUM yum install -y nginx
ADD index.html /usr/share/nginx/html/index.html
RUN echo "daemon off:" >> /etc/nginx/nginx.conf
EXPOSE 80   
#对外的端口是80
CMD ["nginx"]


开始创建
mkdir /opt/dockerfile/nginx -p
cd /opt/dockerfile/nginx
mkdir index.html  #写入测试信息
vim Dockerfile
FROM centos
#Maintainer
MAINTAINER jesse.Hao lampjesse@163.com
#Commands
RUN rpm  -ivh http://xxxx.rpm RUN yum install -y nginx
ADD index.html /usr/share/nginx/html/index.html
RUN echo "daemon off:" /etc/nginx/nginx.conf
EXPOSE 80
CMD ["nginx"]


保存退出


docker build -t oldboyedu/mynginx:v3 /opt/dockerfile/nginx/


Docker run -d -p 83:80 oldboyedu/mynginx:v3


构建DockerHub私有仓库,类似github
1, docker images
在目录的最下面显示docker.io/registry
默认是5000端口
docker run -d -p 5000:5000 registry
生成一串字符
测试 curl 192.168.56.11:5000/v1/search
成功的话可以访问上面


docker tag oldboyedu/mynginx:v3 192.168.56.11:5000/oldboyedu/mynginx:latest


docker push 192.168.56.11:5000/oldboyedu/mynginx:latest


有时候push不行,必须使用https


yum install -y nginx


 


宝塔安装测试:


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


docker run --name BTtest2 -t -i -d -p 20:20 -p 77:77 -p 21:21 -p 80:80 -p 90:22 -p 443:443 -p 3306:3306 -p 188:8888 centos /bin/bash 
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐