Docker容器封装
3.2 容器相关命令
容器也是docker中的核心概念,镜像是创建容器的软件 , 容器是由镜像运行产生的运行实例。镜像和容器的关系,就如同Java语言中类和对象的关系。
如果需要通俗的描述容器的话,我觉得容器就是一个存放东西的地方,就像书包可以装各种文具、衣柜可以放各种衣服、鞋架可以放各种鞋子一样。我们现在所说的容器存放的东西可能更偏向于应用。比如网站、程序甚至是系统环境。
![](media/8673ef01f4e71756c584b83240e7c81f.png)
1.1 查看容器
查看正在运行的容器: | docker ps |
---|---|
查看所有容器: | docker ps –a |
查看最后一次运行的容器: | docker ps –l |
查看停止的容器: | docker ps -f status=exited |
1.2 创建与启动容器
① 什么是宿主机?
就是主机,这个概念是相对于子机而言的,比如你安装有虚拟机的话,那么相对于虚拟机而言,你正在使用的计算机就是宿主机,虚拟机是安装在主机上的,必须在主机上才能运行,主机就是一个“宿主”。
② 创建容器常用的参数说明:
创建容器命令:docker run
-i:表示运行容器 -t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。 –name :为创建的容器命名。 -v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。 -d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。 -p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射 |
---|
(1)交互式方式创建容器
以交互式方式创建并启动容器,启动完成后,直接进入当前容器。使用exit命令退出容器。需要注意的是以此种方式启动容器,如果退出容器,则容器会进入停止状态。可以理解成交互式容器 是前台容器。
docker run -it --name=容器名称 镜像名称:标签 /bin/bash |
创建好容器,并且已经进入到容器内部了,可以直接观察前面中括号里面的内容发现,跟创建容器之前不一样了,
并且 通过 dir 命令,会发现,其实容器内部也是一个 centos , 我们可以把每个容器都看成一个小电脑或者服务器
![](media/3bcfcd97029a7c7360062aa80b564240.png)
重新开一个新的会话,查看刚刚创建的容器是否已经有了。
![](media/637443e4246352040d29de7b2260aba3.png)
查看正在运行的容器:docker ps
退出当前容器:exit
退出之后,容器也退出了,没有删除
(2) 创建后台容器
docker run -id –name=mycentos2 centos:7
查看 docker 容器已经运行
(3) 守护式方式创建容器:
创建一个守护式容器;如果对于一个需要长期运行的容器来说,我们可以创建一个守护式容器。
命令如下(容器名称不能重复):守护容器可以理解成在后台运行的容器
# 守护式容器和交互式容器的创建方式区别: |
通过 docker ps 查看容器已经是运行状态
进入守护式容器方式:
docker exec -it 容器名称 (或者容器ID) /bin/bash |
已经进入到容器内部了,如果现在退出exit,然后查看容器docker ps是否还在后台运行(仍在运行)
1.3 停止与启动容器
- 先通过 docker ps 查看正在运行的容器
- 停止容器:
docker stop 容器名称(或者容器ID) 例如: docker stop mycentos2 |
---|
- 创建完容器之后,停止容器
![](media/0adf6e45e433391ba782d17faf860905.png)
- 查看容器是否已经停止
- 启动容器:
docker start 容器名称(或者容器ID) 例如: docker start mycentos2 (以交互式运行的容器,只是第一次exit退出的时候会关闭容器,当用start启动的时候,就相当于后台启动了,exec进去之后再exit退出不会关闭容器) |
---|
- 查看容器是否已经启动
1.4 文件拷贝
我们需要在容器内安装一个软件,软件首先需要有安装包,我们就需要把安装包拷贝到容器内。我们通常的操作是先把文件上传到宿主机,然后我们在将文件从宿主机拷贝到容器内的某个目录下面进行安装。
将linux宿主机中的文件拷贝到容器内可以使用命令:
![](media/b1724dd4b8f9f38c064bc815a4e3a0fe.png)
如果我们需要将文件拷贝到容器内可以使用cp命令
docker cp 需要拷贝的文件或目录 容器名称:容器目录 例如: docker cp anaconda-ks.cfg mycentos2:/usr/local/ |
---|
拷贝一个文件到 mycentos2 的 /urs/local/ 文件下面 ,拷贝完成之后,删除文件,然后在mycentos2拷贝过来
![](media/18cda7fca174d51bc37a27d1d5711041.png)
登录容器查看拷贝之后的结果
docker exec -it mycentos2 /bin/bash docker exec:表示登陆正在运行的容器 -it:进入命令行 mycentos2:进入到该容器 |
---|
![](media/7319ee760826c3c561bb41e94ac31585.png)
也可以将文件从容器内拷贝出来
docker cp 容器名称:容器目录 需要拷贝的文件或目录 例如:docker cp mycentos2:/usr/local/anaconda-ks.cfg ./ |
---|
我们先通过 exit 退出容器,然后在把文件从容器拷贝到当前目录
![](media/03816b61461eac44c2c85bbe5483ed43.png)
1.5 目录挂载
我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器。
创建容器 添加-v参数 后边为 宿主机目录:容器目录,例如:
# 创建并启动容器mycentos3,并挂载linux中的/usr/local/myhtml目录到容器的/usr/local/myhtml;也就是在linux中的/usr/local/myhtml中操作相当于对容器相应目录操作 docker run -di –name=容器的名字 -v /usr/local/myhtml:/usr/local/myhtml centos:7 比如:docker run -di –name=mycentos3 -v /usr/local/myhtml:/usr/local/myhtml centos:7 |
---|
通过 docker ps 查看正在运行的容器,在创建容器并且进行目录挂载,然后在通过 docker ps 查看刚刚创建的容器是否已经创建
![](media/09b37febc454d8546054fcaa3fd7dc1c.png)
进入到 myhtml 目录 ,通过dir查看是否有文件,通过vi test2 ,创建一个文件,进入test2文件,随便输入一些数据
![](media/4d0019b6b9370ea0516d14609cd70011.png)
进入目录随便输入一些东西 , 退出保存
登录容器,查看刚刚输入的内容
hsg sdg d