直接在本机(物理机)运行程序,速度不是比从docker中启动速度更快?
我们先从docker的口号中找答案。build ship and run any app,any where次口号:an open platform for distributed applications for developers and sysadmin。
这个口号大概说了以下几点。
1、在docker中可以运行任意的app。说anywhere还是有点夸张的。没有docker环境,你还能运行么?总之,就是说,如果你的程序能在docker中运行,就代码可以在任意环境运行。
2、docker为开发人员和运维人员提供了一个开发平台。
这句话,毋庸置疑。开发人员和运维人员都用docker,自然就形成了一个平台。但是目前,都使用虚拟机不也是一个平台么?所以这一点也不足以构成一个独特点。至于分布式应用,不用docker就不能用分布式了么?
所以,从docker这些直接宣传语来说,不足以让大家趋之若鹜。
、停止docker服务。
systemctl stop docker; //每个liunx版本的命令不一样。
2、创建新的docker目录,执行命令df -h,找一个大的磁盘。我的是放在/home目录下面,我的/home目录大小有900G。我在 /home目录下面建了 /home/docker/lib目录,执行的命令是:mkdir -p /home/docker/lib
3、迁移/var/lib/docker目录下面的文件到 /home/docker/lib下面
cp -R /var/lib/docker/ /home/docker/lib/
注意:如果文件内容很多的话,为了确保成功最好是一个文件一个文件的拷贝。如果在拷贝过程中报“设备上没有空间”的错误,就使用mv剪切。
4、修改docker配置(/etc/systemd/system/dockerserviced/devicemapperconf),在文件末添加 --graph=/home/docker/lib
devicemapperconf文件的内容如下:
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd --insecure-registry=私服地址 --graph=/home/docker/lib
注意:如果/etc/systemd/system/dockerserviced/devicemapperconf,这个路径找不到的话,就新建,新建之后加入内容,没有私服地址的话就可以去掉”–insecure-registry=私服地址”。
方法一、软链接
默认情况下Docker的存放位置为:/var/lib/docker
可以通过下面命令查看具体位置:
sudo docker info | grep “Docker Root Dir”
解决这个问题,最直接的方法当然是挂载分区到这个目录,但是我的数据盘还有其他东西,这肯定不好管理,所以采用修改镜像和容器的存放路径的方式达到目的。
这个方法里将通过软连接来实现。
首先停掉Docker服务:
systemctl restart docker或者service docker stop
然后移动整个/var/lib/docker目录到目的路径:
mv /var/lib/docker /root/data/docker
ln -s /root/data/docker /var/lib/docker
这时候启动Docker时发现存储目录依旧是/var/lib/docker,但是实际上是存储在数据盘的,你可以在数据盘上看到容量变化。
方法三、system下创建配置文件
在/etc/systemd/system/dockerserviced 目录下创建一个Drop-In文件“dockerconf”,默认 dockerserviced 文件夹不存在。所以你必须先创建它。
创建Drop-In 文件的原因,是我们希望Docker 服务,使用dockerconf文件中提到的特定参数,将默认服务所使用的位于/lib/systemd/system/dockerservice文件中的参数进行覆盖。如果你想深入了解Drop-In,请阅读systemunit文档
定义新的存储位置现在打开dockerconf增加如下内容:
# sudo vi /etc/systemd/system/dockerserviced/dockerconf
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd --graph=“/mnt/new_volume” --storage-driver=devicemapper
保存并退出VI编辑器,/mnt/new_volume 是新的存储位置,而devicemapper是当前docker所使用的存储驱动。如果你的存储驱动有所不同,请输入之前第一步查看并记下的值。Docker官方文档中提供了更多有关各种存储驱动器的信息。现在,你可以重新加载服务守护程序,并启动Docker服务了。这将改变新的镜像和容器的存储位置。
# sudo systemctl daemon-reload
# sudo systemctl start docker
为了确认一切顺利,运行 # docker info 命令检查Docker 的根目录它将被更改为/mnt/new_volume
5、重载配置,重启docker
systemctl daemon-reload;
systemctl restart docker;
systemctl enable docker;
6、启动成功后,确定容器没问题后删除/var/lib/docker/目录中的文件,然后就OK了。
关注查看全文
Docker显示GUI界面的解决方式有三种
三种介绍:
>
Docker 是一个开源的应用容器引擎,基于Go 语言 并遵从 Apache20 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
Docker最早是在Ubuntu 1204上开发实现的;
Red Hat则从RHEL65开始对Docker进行支持。
而后Windows和Mac上也相应有了Docker版本支持。
在Docker容器技术出现之前,Linux上是已经有一个docker的工具的,但此docker非彼Docker。
这个docker是一个窗口停靠栏程序,就像苹果的Mac系统中的dock那个程序一样的一个工具。
为了区分开来,我们以Docker和docker来进行区分。
Docker:指容器技术。
docker:指窗口停靠栏程序。
Docker技术出来后,因为Linux系统上已经有了docker这个工具,所以Docker软件名也不能跟人家重名啊,要不然没办法安装。
由于那个时候Docker的官网是dockerio,所以就在软件名称上加了io的后缀,在Ubuntu中就是dockerio,在CentOS中就是docker-io。
但是虽然软件名跟docker程序不一样了,但软件安装后的 *** 作命令还是一样的,都是docker的这个命令,所以要安装Docker软件,要先看看有没有安装了那个停靠栏程序docker,有的话要先卸载才行,要不然执行的命令是不对的。
这个时期要安装Docker,就要用docker加io后缀的方式来安装。
Docker容器使用dockerio和docker-io为软件名,主要是前期的一段时间。
后来随着Docker的发展,软件包名改成了docker-engine,不同系统中名称达到了统一。
再后来,随着Docker技术的火爆,在征得docker停靠栏程序作者同意下,原先的停靠栏程序docker名称改掉了,改成了wmdocker,Docker容器技术的软件包名才正式成了docker这个名称,Docker软件包的名称又得到了一次完全的统一。
到Docker1131版本之前,Docker软件包的名称有两次变化,从docker-io(dockerio)到docker-engine,再到docker。
Docker发展到1131版本号后,Docker公司把Docker分成了社区版(免费)Docker CE和商业版(付费)Docker EE两种形式,并且版本号命名方式也改了,以前是那种常用的版本号命令方式,比如01、02、10之类的,现在分社区和商业版后,版本号是“年月”的形式命名的,比如2019年10月发布的,版本号就是1910。
所以在Docker1131之后,直接是Docker-ce 17030版本了,也就是2017年03月发布的。
现在要安装最新版的Docker软件包,就是使用docker-ce这个名称了,如果是商业版的就是docker-ee了。
目前docker的默认存储引擎为overlay2,不同的存储引擎需要相应的文件系统支持,如需要磁盘分区的时候传递d-type稳健分层功能,即需要传递内核参数并开启格式化磁盘的时候指定的功能。
存储引擎的选择文档
AUFS
AUFSAnotherUnionFileSystem是一种UnionFS。V2版本后更名为 advanced multi‐layered unification fileystem,即高级多层统一文件系统。所谓UnionFS就是把不同物理位置的目录合并mount到同一个目录中。简单来说就是支持将不同目录挂载到同一个虚拟文件系统下的文件系统。这种系统可以一层一层的叠加修改文件。无论底下有多少层都是只读,只有最上层的文件系统是可读写。当需要修改一个文件时,AUFS创建该文件的一个副本。使用CoWCopy-on-Write将文件从只读层复制到可写层进行修改,结果也保留在可写层、在Docker中。底下的制度层就是image,可写层就是Container。
Overlay
一种Union FS文件系统,Linux内核318后支持
Overlay2
overlay的升级版,到目前为止,所有Linux发行版推荐使用的存储类型
devicemapper
是CentOS和RHEL的推荐存储驱动程序,但是依赖于direct-lvm,存在空间受限的问题,虽然可以通过后期配置解决;因为之前的内核版本不支持overlay2(集中在Centos/RHEL72之前版本);但当前较新版本Centos和RHEL现已经支持overlay2。
>
使用本机 Docker 授权插件或第三方授权机制与 Docker 守护程序来管理对 Docker 客户端命令的访问。
Docker 默认是没有对客户端命令进行授权管理的功能。
任何有权访问 Docker 守护程序的用户都可以运行任何 Docker 客户端命令。
对于使用 Docker 远程 API 来调用守护进程的调用者也是如此。
如果需要细粒度的访问控制,可以使用授权插件并将其添加到 Docker 守护程序配置中。
使用授权插件, Docker 管理员可以配置更细粒度访问策略来管理对 Docker 守护进程的访问。
Docker 的第三方集成可以实现他们自己的授权模型,以要求 Docker 的本地授权插件
(即 Kubernetes , Cloud Foundry , Openshift )之外的 Docker 守护进程的授权。
如果使用 Docker 本地授权,可使用 --authorization-plugin 参数加载授权插件。
如无特殊需求,默认值即可
docker在web开发中得使用流程概述:
1、创建java镜像:
把所有的文件都放置在docker目录下,分别为不同的功能创建不同的目录。
$ sudo mkdir docker/java
$ sudo cd docker/java
接下来在该目录下创建一个jdk的Dockerfile文件,具体内容如下:
# openjdk 6
# version 10
FROM ubuntu:1404
MAINTAINER mhy "mhy2011@gmailcom"
RUN apt-get update
RUN apt-get install -y -q openjdk-7-jdk
WORKDIR /
ENV JAVA_HOME /usr/lib/jvm/java-7-openjdk-amd64
CMD ["/bin/bash"]
创建完Dockerfile之后来生成一个jdk的镜像
$ sudo docker build -t pobaby/java
可以看到已经生成了一个镜像名为pobaby/java的镜像,接下来检验一下该镜像能否正常使用,通过该镜像启动一个容器,然后看看java命令是否能执行。
2、创建resin镜像
这里以使用的webserver是resin,没有使用tomcat,以此说明:
使用刚才创建的pobaby/java的镜像为基础镜像来创建resin镜像
# resin
# version 10
FROM pobaby/java
MAINTAINER mhy "mhy2011@gmailcom"
RUN apt-get update
ADD resin-3114targz /opt/
WORKDIR /opt/
RUN mv resin-3114 resin
EXPOSE 8080
ENTRYPOINT ["/opt/resin/bin/>
ADD resin-3114targz /opt/
是把当前目录下的resin-3114targz添加到容器的/opt/目录下并解压,当然也可以指定从网络上下载
接下来再生成一个包含resin的镜像
$ sudo docker build -t pobaby/resin
这里又生成了一个名为pobaby/resin的镜像。接下来通过该镜像启动一个容器,观察一下环境是否正常。
$ sudo docker run -d -p 80:8080 --name web001 pobaby/resin
3、接下来访问一下该容器,把本机80端口映射到容器的8080端口上
4、启动Web项目
创建一个包含WebServer的基本镜像,然后启动一个容器,在启动容器的时候挂载上本地的web应用,具体如下:
$ sudo docker run -d -p 8881:8080 --name web-demo -v $PWD/webapps:/opt/resin/webapps pobaby/resin
以上启动了一个名为web-demo容器,并把webapps下的项目web-demo挂载到容器/opt/resin/webapps下
访问结果如下:
以上已经实现了一个简单的基于Docker容器运行的Java Web程序。
以上就是关于docker运行的mysql和本地运行的区别全部的内容,包括:docker运行的mysql和本地运行的区别、docker根目录下没有docker文件,怎么办、docker如何实现运行可视化程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)