目录
nsenter命令可以进入到容器,是生产上比较推荐使用进入容器的方式
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