docker 学习笔记

 Docker的使用场景:

  1. 使用docker容器开发、测试、部署服务
  2. 创建隔离的运行环境
  3. 搭建测试环境
  4. 构建多用户的平台即服务(PAAS)基础设施
  5. 提供软件即服务(SaaS)应用程序
  6. 高性能、超大规模的宿主机部署

Docker的应用范围:

      面向产品

      面向开发

      面向测试

      面向运维

      面向自动化

      面向微服务

      面向大规模的分布式架构(微信红包)

Docker依赖的linux内核特性:

      Namespaces 命名空间(系统资源的隔离:进程,网络)

      Contro groupcgroups)控制组

 

Nampspaces命名空间

     PID   进程隔离

     NET  管理网络接口

     IPC   管理跨进程通信的访问

     MNT  管理加载点

     UTS   隔离内核和版本标识 

Contro groups控制组

     用来分配资源

   来源于google

作用:

     资源限制

     优先级设定

     资源计量

     资源控制

Docker容器的能力:

   文件系统隔离:每个容器都有自己的root文件系统

     进程隔离:每个容器都运行在自己的进程环境中

     网络隔离:容器间的虚拟网络接口和IP地址都是分开的

    资源隔离和分组:使用cgroups将CPU和内存之类的资源独立分配给每个docker容器

Docker的基本命令:

1.查看所有镜像:docker images

  docker images --no-trunc

2.启动容器:

 运行容器输出字符串:docker run docker.io/learn/tutorial echo 'hello word'         (docker.io/learn/tutorial 镜像名,下同)

 运行容器安装ping:docker run docker.io/learn/tutorial apt-get install ping     

 docker run docker.io/learn/ping ping www.baidu.com

 docker run --name=doc1 -d  docker.io/ubuntu /bin/sh -c "while true;do echo hello word;sleep 1;done"

A. docker run --name=ubt -i -t docker.io/ubuntu /bin/bash

--name:自定义容器名

-i:保持终端打开状态

-t:tty打开

B.docker run -d -p 91:80 --name mynginx docker.io/nginx

-d:以守护形式启动容器(常驻后台)

-p:设置容器的端口映射

91:映射后的端口(外网访问:http://ip:91)

80:容器里的端口

3.查看容器

A.查看正在运行的容器:docker ps

B.查看所有容器:docker ps -a

C.查看最近运行的容器:docker ps -l

D.查看容器详细信息:docker inspect 93fa514d0759(容器ID)

4.进入容器

以守护形式运行容器:

 进入正在运行的容器:docker attach 0de1ff2feb72(容器ID)

 5.重启某个容器:docker restart doc1(容器名)

   启动已停止的容器:docker start doc1      docker start -i doc1

   停止守护式容器:dockrt stop doc1           docker  kill doc1

(stop:发送停止的命令(有延迟)    kill:直接停止(无延迟)

 6.删除容器:docker rm doc1

    强制删除容器:docker rm -f doc1

7.删除镜像:docker rmi  docker.io/learn/ping

   强制删除镜像:docker rmi -f  docker.io/learn/ping

  删除所有镜像:docker rmi (docker images -q)

8.搜索镜像:docker search ubuntu              docker search -s 3  ubuntu

  拉取:docker pull docker.io/ubuntu

  保存:docker commit -a 'zhuoshao' -m 'nginx' commit_test  zhuoshao/commit_test1       

            docker commit -m 'my nginx' 9354cd88d208 zhuoshao/my-nginx:v1

  -a:作者名

  -m:message,描述

  commit_test:要保存的容器名(容器ID)

  zhuoshao/commit_test1:保存后的镜像名

 上传提交镜像(需要注册doucker hub账号):docker push zhuoshao/commit_test1

9.查看容器日志

  docker logs -tf --tail 10 doc1

10.查看容器内进程:docker top 容器名

11.获取容器的pid:docker inspect --format "{{.State.Pid}}" uubt

通过pid进入容器(需要 yum install -y util-linux):nsenter --target 28487 --mount --uts --ipc --net --pid

查看ip路由:ip ro li

 

docker的数据卷直接把数据写在硬盘上

1.创建一个数据卷容器(映射硬盘目录):

docker run -d -it --name volume-test1  -v  /data docker.io/nginx

(修改本地目录文件,容器目录中文件改变。改变容器目录同理)

 -i:保持终端打开状态

 -t:tty打开

 -v:使用数据卷

 /data:容器中数据卷路径

查看数据卷映射目录:

docker inspect volume-test1 | grep Mounts -A 10

这是docker本地硬盘目录,进入此目录。创建一个文件:touch hehe

则在容器的data目录中也会出现响应的文件

2.把本地的目录映射到容器的目录当中:

docker run -it --name volume--test2 -h nginx -v /opt:/opt docker.io/centos

第一个opt:本地目录

第二个opt:容器目录

-h:别名

docker run -it --name volume--test2 -h nginx -v /opt:/opt:ro docker.io/centos

:ro:只读

3.新容器使用旧容器挂载的数据卷(挂载2的数据卷):

docker run -it --name volume-test3 --volumes-from volume-test2  docker.io/centos

容器的停止对数据卷没有影响

 

镜像的构建:

1.手动创建

docker search contos

docker pull docker.io/centos(镜像名)

创建容器(centos

docker run -it --name volume-test3 --volumes-from volume-test2 docker.io/centos

构建nginx

  1. 先安装工具和依赖:yum install -y  wget gcc gcc-c++ make pcre-devel zlib-devel openssl openssl-devel
  2. 下载软件:wget http://nginx.org/download/nginx-1.16.1.tar.gz
  3. wget ftp://ftp.pcre.org/pub/pcre/pcre-8.40.tar.gz
  4. mv *.gz /usr/local/src
  5. cd /usr/local/src
  6. tar zxf pcre-8.40.tar.gz
  7. tar zxf nginx-1.16.1.tar.gz
  8. 创建一个www用户:useradd -s /sbin/nologin -M www

        9.安装:./configure --prefix=/usr/local/nginx

        10.make && make install

        11.vi /etc/rc.local  ->  /usr/local/nginx/sbin/nginx

        12.vi /usr/local/nginx/conf/nginx.conf  -> daemon off;

保存容器:

docker commit -m 'my nginx' 9354cd88d208 zhuoshao/my-nginx:v1

测试运行:

docker run -d -p 99:80 zhuoshao/my-nginx:v1  /usr/local/nginx/sbin/nginx

其他例子:

docker run -p 80 --name web -i -t docker.io/ubuntu /bin/bash

apt-get install -y nginx

apt-get install -y vim  

mkdir -p /var/www/html

cd /var/www/html

vim index.html

whereis nginx

ls /etc/nginx

ls /etc/nginx/sites-enabled

vim /etc/nginx/sites-enabled/default

nginx

ps -ef:查看运行的进程

查看端口映射情况:docker port web

查看容器中进程运行情况:docker top web

查看网站是否顺利运行:curl http://127.0.0.1:32768

curl http://172.17.0.2(容器的地址)

停止容器之后重新启动,发现nginx未启动

可使用exec命令启动子进程:docker exec web nginx

 

2.自动创建:dockerfile

 

 

运行:docker build -t nginx-file:v1 /opt/dockerfile/nginx/

 

 

其他:docker 的启动

 

 

 

 

数据卷的还原和备份:

 

 

 

 

 

posted @ 2021-01-07 17:55  离岸少年  阅读(150)  评论(0编辑  收藏  举报