Docker简介

 

目录

Docker镜像管理

 docker search命令

docker pull命令

docker image 查看镜像

Docker容器管理 

 docker run 运行容器

docker ps 命令

docker start 命令

nsenter命令可以进入到容器,是生产上比较推荐使用进入容器的方式

编写一个脚本in.sh进入容器

Docker网络访问

brctl命令

iptables命令

随机映射

指定映射端口

Docker数据管理

-v /data挂载方式,随机映射

-v src:dst挂载在指定目录

--volume-from 与另一个容器共享数据目录

attach命令:切换进行到前台或者后台 

网络设置

停止所有的container

两个container之间的通信 

容器的构建方式

手动构建

采用Dockerfile构建

 Dockerfile的指令详解和实例

 Dockerfile常见指令

 FROM指令

Dockerfile的创建

 ENTRYPOINT指令的使用

ADD命令使用

 copy命令的使用

ENV指令

WORKDIR命令的使用(类似 cd的作用)

USER指令使用

ONBUILD指令

 VOLUME指令

Docker的私有仓库

Docker资源隔离和限制

使用压力测试软件stress测试Docker的资源限制

Docker的网络模式

桥接模式

 HOST网络模式

使用另外一个docker容器的网络

Docker Registry

docker tag

docker push 

docker pull

Docker Compose的使用

Docker可视化管理工具shipyard


Docker官网:https://docs.docker.com/

官方镜像公共仓库:https://hub.docker.com/

doclker入门课程笔记:https://blog.csdn.net/qq_39564555/article/details/97620705

 

 

Docker镜像管理

 docker search命令

从仓库中搜索centos相关镜像

 

docker pull命令

将centos镜像拉取下来

docker image 查看镜像

 

Docker容器管理 

 docker run 运行容器

docker run --name mydocker -it centos /bin/bash

    --name  起一个名字

   -it:是两个参数,i表示让容器终端保持打开状态,我要输入东西。t表示绑定伪终端绑定

 /bin/bash 运行指定的命令

注意:当我们指定的命令运行完毕,docker容器也就退出了。

每次docker容器启动,只能运行一个应用程序。

运行的时候,如果本地没有镜像,会从远端pull这个镜像,如果远端也没有,就是失败。

进入容器内部后,就可以使用相关命令了,和linux命令有些类似。(进入有,有一个标志,root@后面变成了id)

在docker内部查看IP使用ip ad li命令。

 

docker ps 命令

docker start 命令

docker run -d 中的-d参数表示后台运行

nsenter命令可以进入到容器,是生产上比较推荐使用进入容器的方式

nsenter命令可以进入到另外一个进程中,可以通过容器的PID进入的容器中。其位于util-linux中,的安装如下:

如下可以使用容器的名字mynginx,也可以使用容器的ID 

 

编写一个脚本in.sh进入容器

Docker网络访问

brctl命令

iptables命令

 

 进入容器内部,ping 一下可以看到网络是通的,采用ip ad li打印网络信息。

ip ro li 命令查看路由

退出容器,使用ifconfig查看主机的网络,

 

随机映射

使用docker ps -l 发现容器内部端口80被映射到32769

访问主机的32769端口,发现可以访问容器nginx

指定映射端口

 

Docker数据管理

-v /data挂载方式,随机映射

 看一下data放在哪里?(目录映射)

在物理位置创建一个hehe文件,如上图,在容器中可以看到页出现了。

-v src:dst挂载在指定目录

挂载指定目录,源:目标,注意冒号前不能有/线

 挂载目录只读,目录后面添加:ro即可

--volume-from 与另一个容器共享数据目录

共享之前已经创建的volime-test1数据(不论该容器是否还在运行)。 ls发现,展示的内容是之前在volime-test1时创建的数据。

attach命令:切换进行到前台或者后台 

 进程运行完了,container也就退出了。启动container执行echo命令,打印完毕,程序退出。

docker run -d 后台执行一个shell脚本,采用docker attach Id(305),将该container切换至前台运行。

 退出docker attach Id(305)命令,程序转至后台运行,采用docker log 打印查看LOG。

指定输出端docker run -a stdin

网络设置

有两个正在运行的container,就有两个veth{id}分别与之对应。已经停掉的,则不会有对应的veth{id}.图中灰色的已经退出(exit)

 

 

创建一个container,每隔5秒打印一下当前的网络信息。如下网络仅限于主机与它的通信

创建一个主机的网络信息,只要主机可以访问,该container也可以被外界访问

例子,使用主机网络(host:192:168:33:10)启动一个文件系统(该文件系统默认端口号是8000)(主机可以访问,则该服务九可以被访问)

在外部使用网页访问

停止所有的container

 

 指定container的端口为8000,系统为自动分配主机上的端口与之对应,如下,自动分配的是49151

可以看到直接访问 主机的49151对应访问的是container对应端口的内容

 

inspect查看container中的所有信息,可以看到端口映射、在主机host上的id等

通过ps -a 

将主机的某一个目录与container绑定,使container可以对这个目录进行读写。container死掉后,其输出的内容可以保留到宿主机上。

在主机上创建一个testdir目录,然后绑定到container,启动container并执行ls -al 命令

两个container之间的通信 

 

 link表示把对应的container的信息(IP和端口等)通过环境变量的方式写到我们当前创建的container中。redis:db  中db表示redis的别名。

如下灰色的部分表示的是 redis的对应配置,是当前container的一些环境变量。我们可以通过都环境变量的方式获取redis的相关配置。

 

容器的构建方式

手动构建

在centos的基础上手动构建一个ngix为例

首先运行一个基容器,并进入其内部进行构建

安装容器内部需要的一些包 

创建一个新用户,并指定登陆后所使用的shell

 装载完需要的工具后,退出,提交commit。就可以将在基本镜像上构建的容器变为新的镜像。

第一次没有起来,加了后面的命令后起来了。(命令运行完毕,则容器退出。不加肯定不行呀。要看到运行状态,命令还不能马上运行完,不然,秒级退出也看不到呀)

采用Dockerfile构建

一个Dockerfile文件包含如下信息 

其常用的命令和含义如下 :

采用dockerfile命令构建一个容器如下:

按照顺序依次为

基于centos

作者Jason Zhao 

添加两个文件到目录/usr/local/src目录下(.tar.gz文件会自动解压)

安装相关编译工具等

添加用户

WORKDIR :从当前目录进入到/usr/local/src/nginx-1.9.3目录下。

运行./configure进行配置和编译

将当前路径加入到环境变量中

导出80端口

CMD命令指定为"nginx"

 编辑完毕Dockerfile文件之后,开始编译,进行构建。如下,可以看到每次执行一个命令都会有一个ID(红色划线),每一步都是容器的一层

每一次构建镜像的时候,如果发现同名字的,就会在这个镜像之上继续构建。如果想从新构建,可以使用--no-cache指令。 

 

 Dockerfile的指令详解和实例

 Dockerfile的指令构成如下

 

 Dockerfile常见指令

 FROM指令

 MAIN

Dockerfile的创建

Dockerfile第一个字母D一定要大写。

如下Dockerfile文件第一行表示基于哪一个image进行创建。第二行表示创建一个文件。第三行用户查看我们创建的文件是否成功。

docker run -t test/osf1,没有定义CMD,默认使用文件内部的CMD,所以输出ls - al的结果

docker run -t test/osf1 echo hell world ,定义了CMD,所以使用当前CMD,而不使用脚本中定义的CMD

 

 ENTRYPOINT指令的使用

 

例程

 编译之后,运行。

docker run -t test/osf2,没有定义CMD,默认使用文件内部的CMD,所以输出ls - al  /osforce.sh的结果

docker run -t test/osf1 / ,定义了CMD为/,替换脚本中的CMD,执行ls - al  /

ADD命令使用

将网络上的文件复制到container中的/apache/httpd-2.2.29.tar.gz

 可以看到文件已经下载到/apache/httpd-2.2.29.tar.gz

 copy命令的使用

将当前路径中的apache复制到container中的/apache/url中。

 

RUN和ADD命令命令均已经执行过,所以直接使用缓存的内容。

ENV指令

例程 定义一个环境变量class ='osfforce',

run export:打印当前container中的所有环境变量

相关展示如下

WORKDIR命令的使用(类似 cd的作用)

例程

USER指令使用

ONBUILD指令

 

 

可以看到原始container中创建build.sh文件。

修改dockfile文件

 

 VOLUME指令

例程

 使用inspect可以看到有一个Volumes是data1,但是s这个时候Volumes并没有被真正的创建,只有创建container的时候,这个Volumes才会被创建。

创建完成,使用docker inspect命令查看一下 ,可以看到如下划线的已经有了绝对地址。该地址不依赖container和image。并且container可以读写这个目录。

Docker的私有仓库

Docker资源隔离和限制

使用压力测试软件stress测试Docker的资源限制

启动两个stress,都使用一个CPU(--cpu 1 ,主机只有一个CPU,如果有多个,可以配置多个),第一个不限制份额,第二个限制使用512(-c 512,一个CPU的份额是1024) 

如果只启动第一个,则会沾满

两个同时启动时占用CPU的使用如下: 

 

 设置使用-m 128m 

 

Docker的网络模式

桥接模式

默认是桥接模式

 HOST网络模式

host模式是指docker不适用任何的namaspace,直接和主机使用同一个堆栈。

 

使用另外一个docker容器的网络

 

Docker Registry

docker tag

docker push 

docker pull

https://www.jianshu.com/p/fef890c4d1c2

 

Docker Compose的使用

https://www.cnblogs.com/zhizihuakai/p/11296743.html

Docker可视化管理工具shipyard

https://blog.csdn.net/weixin_40461281/article/details/92787622

重要参考: 

Blog:http://www.unixhot.com

Github:http://github.com/unixhot

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值