Linux下部署docker记录(1)-Volume使用

之前部署了Linux下部署docker记录(0)-基础环境安装,接下来看看Docker Volume的使用。

Docker volume使用
1)一个数据卷是一个特别指定的目录,该目录利用容器的UFS文件系统可以为容器提供一些稳定的特性或者数据共享。数据卷可以在多个容器之间共享。
2)创建数据卷,只要在docker run命令后面跟上-v参数即可创建一个数据卷,当然你也可以跟多个-v参数来创建多个数据卷,当创建好带有数据卷的容器后,你就可以在其他容器中通过--volumes-froms参数来挂载该数据卷了,而不管该容器是否运行。你也可以在Dockerfile中通过VOLUME指令来增加一个或者多个数据卷。
3)如果有一些数据想在多个容器间共享,或者想在一些临时性的容器中使用该数据,那么最好的方案就是你创建一个数据卷容器,然后从该临时性的容器中挂载该数据卷容器的数据。

例如如下操作:
启动一个名为xqsj_Container容器,此容器包含两个数据卷/var/volume1和/var/volume2
注意这一个容器创建后,并没有进入到容器内,它的作用只是创建了连个数据卷;后两个容器创建后可以进入~
[[email protected] ~]# docker run -v /var/volume1 -v /var/volume2 --name xqsj_Container centos /bin/bash
[[email protected] ~]#

创建App_Container容器,挂载xqsj_Container容器中的数据卷
[[email protected] ~]# docker run -t -i --rm --volumes-from xqsj_Container --name App_Container centos /bin/bash
[[email protected] /]# ls /var/volume1                           //发现这两个数据卷都存在
[[email protected] /]# ls /var/volume2
[[email protected] /]# echo "this is volume1" > /var/volume1/test1
[[email protected] /]# echo "this is volume2" > /var/volume1/test2

或者再创建一个容器,挂载App_Container中从xqsj_Container挂载的数据卷
[[email protected] ~]# docker run -t -i --rm --volumes-from App_Container --name LastApp_Container centos /bin/bash
[[email protected] /]# ls /var/volume1
test1
[[email protected] /]# ls /var/volume2
test2
[[email protected] /]# cat /var/volume1/test1
this is volume1
[[email protected] /]# cat /var/volume2/test2
this is volume2

列出所有的容器

[[email protected] ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                          PORTS                    NAMES
b4c27e360614        centos              "/bin/bash"         38 seconds ago       Up 37 seconds                                            LastApp_Container
b9891bcdfed0        centos              "/bin/bash"         About a minute ago   Up About a minute                                        App_Container
1d6f0591b781        centos              "/bin/bash"         About a minute ago   Exited (0) About a minute ago                            xqsj_Container
eaf66f1e43ab        centos              "/sbin/init"        2 hours ago          Up 2 hours                      0.0.0.0:8888->8080/tcp   hungry_khorana

列出目前正在运行的容器

[[email protected] ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS                    NAMES
b4c27e360614        centos              "/bin/bash"         41 seconds ago       Up 40 seconds                                LastApp_Container
b9891bcdfed0        centos              "/bin/bash"         About a minute ago   Up About a minute                            App_Container
eaf66f1e43ab        centos              "/sbin/init"        2 hours ago          Up 2 hours          0.0.0.0:8888->8080/tcp   hungry_khorana

可以将这个docker主机添加到DaoCloud云平台里面管理,在DaoCloud上可以看到该docker主机的容器情况,并登陆到容器的控制台里

即使删除了刚开始的第一个数据卷容器或者中间层的数据卷容器,只要有其他容器使用数据卷,数据卷都不会被删除的。

也可以把一个本地主机的目录当做数据卷挂载在容器上,同样是在docker run后面跟-v参数,不过-v后面跟的不再是单独的目录了,它是[host-dir]:[container-dir]:[rw|ro]这样格式的,host-dir是一个绝对路径的地址,如果host-dir不存在,则docker会创建一个新的数据卷,如果host-dir存在,但是指向的是一个不存在的目录,则docker也会创建该目录,然后使用该目录做数据源。例如:
[这个在Linux下部署docker环境记录这一篇文档中已经说明]

不能使用docker export、save、cp等命令来备份数据卷的内容,因为数据卷是存在于镜像之外的,但是总会有变通方法的,如下:
# docker run -rm --volumes-from DATA -v $(pwd):/backup busybox tar cvf /backup/backup.tar /data
创建一个新容器,挂载数据卷容器,同时挂载一个本地目录,然后把远程数据卷容器的数据卷通过备份命令备份到映射的本地目录里面。
--------------------------------------------------------------------------------------------------------------------------------------
注意下面四个命令:
开启/停止/重启container
# docker start/stop/restart <container>

再次运行某个container(包括历史container)
#docker start [container_id]

连接一个正在运行的container实例(即实例必须为start状态,可以多个窗口同时attach一个container实例);前提是docker ps命令后有这个容器的活跃ID存在
#docker attach [container_id]

启动一个container并进入交互模式(相当于先start,在attach);前提是docker ps命令后有这个容器的活跃ID存在
#docker start -i <container>

注意:当一个容器创建成功并进入到容器后,别手动ctrl+d退出来。窗口若是关闭了,只要是正在运行的状态,就可以使用attach进入
[[email protected] ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b4c27e360614 centos "/bin/bash" 41 seconds ago Up 40 seconds LastApp_Container
b9891bcdfed0 centos "/bin/bash" About a minute ago Up About a minute App_Container
eaf66f1e43ab centos "/sbin/init" 2 hours ago Up 2 hours 0.0.0.0:8888->8080/tcp hungry_khorana
[[email protected] ~]# docker attach b4c27e360614
[[email protected] /]#

[[email protected] ~]# docker attach b9891bcdfed0
[[email protected] /]#

由于eaf66f1e43ab这个容器将dbus等服务启动起来了,它的进入方式跟其他的有别。参考:http://www.cnblogs.com/kevingrace/p/6234600.html
[[email protected] ~]# docker exec -it eaf66f1e43ab /bin/bash
[[email protected] /]#

[[email protected] ~]# docker start -i App_Container           //按住ctrl+c或回车都行
[[email protected] /]#

注意:
docker attach后再一次查看的时候Exited(0)已经没有了,也就是说明该容器已经从终止的状态变为了正在运行的状态
命令执行成功后,会发现已经进入该容器了,而且之前的操作的文件依然存在
如果命令执行后没有反应的话,再一次点击回车即可

docker attach也就是将后台容器切换到前台

使用image创建container并进入交互模式, login shell是/bin/bash
#docker run -i -t <image> /bin/bash

映射 HOST 端口到容器,方便外部访问容器内服务,host_port 可以省略,省略表示把 container_port映射到一个动态端口。
#docker run -i -t -p <host_port:contain_port> <image> /bin/bash

注意:
使用start是启动已经创建过得container,使用run则通过image开启一个新的container。

检查某个特定的容器
检查某一特定容器可以使用docker inspect命令,后面跟容器的名称或唯一ID。
# docker inspect [OPTIONS] Container|IMAGE|TASK [CONTAINER|IMAGE|TASK...]
Docker自动创建的容器名称同样是不方便记忆的,但我们可以在运行容器时使用--name参数为其指定一个名称,命令格式为docker run --name=<yourname>。
[[email protected] ~]# docker inspect App_Container

使用logs命令查看守护式容器
可以通过使用docker logs命令来查看容器的运行日志,其中--tail选项可以指定查看最后几条日志,而-t选项则可以对日志条目附加时间戳。使用-f选项可以跟踪日志的输出,直到手动停止。
# docker logs [OPTIONS] CONTAINER
[[email protected] ~]# docker logs App_Container

查看运行中容器内的进程
# docker top CONTAINER [ps OPTIONS]
[[email protected] ~]# docker logs App_Container

在运行中容器内启动新进程
虽然Docker鼓励我们一个容器只运行一个服务,但是当我们需要对运行中的容器进行监控、维护和管理时,通常需要为运行中的容器启动新进程。
# docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
这条命令与docker run极为相似,也可以使用-i、-t和-d等参数。
[[email protected] ~]# docker exec -i -t App_Container /bin/bash

-i: –interactive 采用交互式创建容器
-t: –tty 为容器提供终端

查看root密码
ocker容器启动时的root用户的密码是随机分配的。所以,通过这种方式就可以得到容器的root用户的密码了。
#docker logs 5817938c3f6e 2>&1 | grep ‘User: ‘ | tail -n1
--------------------------------------------------------------------------------------------------------------------------------------

时间: 2024-10-10 07:10:37

Linux下部署docker记录(1)-Volume使用的相关文章

在Linux下部署kettle的Job

关于如何用kettle创建job以及如何部署kettle到linux上,我就不细说了,大家应该都会,下面重点说一下,如何让job执行起来先将创建好的脚本上传到kettle指定目录下面,创建调用job执行的脚本文件, export JAVA_HOME=/usr/java/jre1.6.0_23 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar /opt

linux下部署项目问题

1. 今天linux下部署thinkphp项目,数据库用的mysql. 页面其他都是正常的,但是从数据库中取出的数据都是乱码.最后查了资料 解决方案: 在ThinkPHP里面 Library\Think\Db\Driver.class.php 103行 后加上 $this->linkID[$linkNum] ->query("set names utf8");

Linux下部署多个Tomcat(完整)

Linux下部署多个Tomcat 1.环境:1.1.Centos 5.01.2.apache-tomcat-6.0.18 2.需要解决一下几个问题2.1.不同的tomcat启动和关闭监听不同的端口2.2.不同的tomcat的启动文件startup.sh 中要指定各自的CATALINA_HOME和CATALINA_BASE这两个环境变量. 3.解决步骤: 3.1.修改/etc目录下的profile文件,添加一组java环境变量,和两组CATALINA环境变量:修改后的profile文件示例如下:J

【初级篇】Linux下部署DNS域名解析服务

Linux下部署DNS域名解析服务 1.          实验需求: 1)     使用RPM包安装bind服务 2) 实现配置正向解析域名,反向解析IP地址. 3)搭建从服务器,实现配置和主服务器实时同步,相互提供冗余备份. 2.          实验环境: Linux服务器系统版本:Red Hat Enterprise Linux 6.5(主)   IP:192.168.10.20 Linux服务器系统版本:Red Hat Enterprise Linux 6.5(从)   IP:192

Linux下部署tomcat

在Linux系统下,重启Tomcat使用命令操作的! 首先,进入Tomcat下的bin目录 cd /usr/local/tomcat/bin 使用Tomcat关闭命令 ./shutdown.sh 查看Tomcat是否以关闭 ps -ef|grep java 如果显示以下相似信息,说明Tomcat还没有关闭 root 7010 1 0 Apr19 ? 00:30:13 /usr/local/java/bin/java -Djava.util.logging.config.file=/usr/loc

linux下部署jenkins

今天做作业连了一天的mysql. 最后我痛定思痛,决定从0开始学习jsp,省的又面临不会的局面. 忙活了一晚上,终于把数据库连接上了,不过,好伤心啊,我连个数据库都这么墨迹... <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@page import="data.database"%> <%@page

Linux下部署Java应用程序

Linux软件安装的特点: 1.Linux中没有注册表的概念,因此要想删除某个软件直接删除软件目录就可以了. 2.软件的安装有些需要Linux软件包的支持,在Linux中使用rpm命令管理软件包. 3.Linux中软件安装的过程很迅速,并且软件的运行速度也很快. 4.Linux中权限管理很严格,因此安装时需要对安装介质进行权限配置. 体验Linux下的Java开发 编译器->字节码->(虚拟机)本地机器码->执行 Linux系统与Windows系统最大的区别: Windows路径分隔是&

Linux下部署Symfoy2对app/cache和app/logs目录的权限设置

在linux下部署完Symfony2,可能在访问的时候会报app/logs或者app/cache目录没有写权限的错误.在linux下,如果我们在命令行登陆的用户和web应用服务器(apache.nginx等)的用户不一样的时候, 可以使用下面四个方法来解决这个问题. 1.在支持chmod +a 的系统下使用ACL 很多版本的linux系统都支持chmod +a命令,所以我们优先使用这个命令.找出web应用服务器的用户名赋值到变量HTTPDUSER上. 1 $ rm -rf app/cache/*

关于在linux下部署php项目

废话不说,直奔主题: 1.关于session的使用: session_start()之前不能有任何输出. 比如 echo 'hi' 或者一般的html标签 或者空行 2.header跳转页面,和session一样,之前都不能有任何输出. 3.在iframe框架中,别忘了使用session前,在载入的页面中一定写入session_start..不然调整了一天,突然菊花一惊,发现session不能用,还以为是页面跳转后session失效了呢. 4.关于mysql数据库的部署. 所有mysql数据库在