Linux Containers Linux容器 缩写LXC,其对进程进行隔离,而非一个完整的操作系统。Docker属于LXC的一种封装,提供简单易用的容器使用接口。Docker主要用于提供一次性环境、提供 弹性的云服务、组件微服务架构。
Docker是一个开源的开品,有两个版本:CE(Community Edition)和EE(Enterprise Edition)。企业版包含一些收费服务,社区版适合个人开发者。
安装完成后,使用如下命令验证是否安装成功:
docker -version
Docker需要用户具有sudo权限,为了避免每次输入sudo以及用户不具有sudo权限,请先使用管理员用户将特定的用户添加到Docker用户组:
sudo usermod -a -G docker $USER
Docker 是服务器----客户端架构。命令行运行docker命令的时候,需要本机有 Docker 服务。如果这项服务没有启动,可以用下面的命令启动:
# 启动Docker服务sudo service docker start# 设置开启自己懂systemctl enable docker.service# 检查开机自启动设置成功没systemctl list-unit-files |grep dockerdocker.service enabled docker.socket enabled
Docker将应用程序及其依赖打包在镜像(image)文件里,通常一个image会继承自另一个image,开发者在其中加入个性化的配置,从而形成定制化的镜像文件。
Docker通过image来生成并运行虚拟容器。比如说我们的网站程序打包成image文件并拷贝在一个服务器上,通过docker根据此image文件在服务器上生成并运行多个相同的网站程序。
通过Docker管理image文件:
# 列出本机的image文件docker image ls# 删除本机image文件docker image rm $image_name
image具备复用性,通常我们可以使用别人制作好的Image文件,这些共享镜像通常来自于Docker Hub。
我们可以从Docker官方镜像仓库/第三方仓库拉取image文件并运行。
从官方拉取hello-world镜像来感受下Docker:
docker image pull library/hello-world
Docker官方提供的镜像文件都在library下,因此library是默认镜像组,可省略不写:
docker image pull hello-world
基于image文件生成并运行容器:
docker container run hello-worldHello from Docker!This message shows that your installation appears to be working correctly....
输出一段话后,hello-world容器自动终止。
有些容器不会自动终止,因为它们提供的是服务例如网站容器和虚拟操作系统容器,运行ubuntu的容器,docker会从镜像仓库下载ubuntu的镜像,下载完成后直接从ubuntu镜像运行容器实例:
docker container run -it ubuntu bashUnable to find image 'ubuntu:latest' locallylatest: Pulling from library/ubuntuf476d66f5408: Pull complete...Status: Downloaded newer image for ubuntu:latestroot@341a7595b69e:
输入exit或按Ctrl+D可退出此ubuntu容器实例进程,此种方式依赖命令行运行,命令行退出则容器进程终止(使用Ctrl+P+Q也可退出容器且不关闭容器)。使用ps命令查看docker进程,可见ubuntu的进程已退出:
docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS 341a7595b69e ubuntu "bash" 2 minutes ago Exited 44a7468dabfd hello-world "/hello" 23 minutes ago Exited
也可以将将容器作为后台进程运行,再使用attach命令进入在后台运行的容器:
docker container run -itd ubuntu1f7b446e9a8f6a9e9ec8066526f055222c9cfb6bf75f5389a8a9163428d53272docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS1f7b446e9a8f ubuntu "bash" 13 seconds ago Up 11 seconds341a7595b69e ubuntu "bash" 2 minutes ago Exited 44a7468dabfd hello-world "/hello" 23 minutes ago Exited
容器在后台运行成功,使用attach/exec命令进入后台进程的ubuntu容器:
# docker attach [OPTIONS] CONTAINERdocker attach 1f7b446e9a8f# docker exec [OPTIONS] CONTAINER COMMAND [PARAMS]docker exec 1f7b446e9a8f bashroot@1f7b446e9a8f:/#
容器进程退出,但容器文件依然存在,因此关闭容器不会删除容器文件。一些container常用命令:
# 启动容器docker start CONTAINER# 50s内停止容器,否则强制停止docker stop -t 50 CONTAINER# 强制停止容器docker kill CONTAINER# 重启容器docker restart CONTAINER# 删除容器文件docker rm CONTAINER
使用Dockerfile来定制image,适应我们自己的需要。Dockerfile是一个文本配置文件,docker将根据它生成我们需要的image。
拉取测试代码:
git clone https://github.com/blackist/maven-quiz.git
在本地编译maven项目,mvn clean package编译出需要的war包。
也可基于maven镜像,在容器内构建maven项目,但需要令行配置
在此项目基础上构建Dockerfile项目,新建Dockerfile配置文件,内容如下:
FROM openjdk:8VOLUME /tmpADD ./target/maven-quiz.jar /app.jarEXPOSE 8000ENTRYPOINT ["nohup", "java", "-Dserver.port=8000", "-jar", "/app.jar", "&"]
基于openjdk8镜像编译自定义镜像
将本地文件夹挂载到当前容器
ADD ./target/maven-quiz.jar /app.jar 是拷贝war文件到容器
开放8000端口
ENTRYPOINT ["nohup", "java", "-Dserver.port=8000", "-jar", "/app.jar", "&"] 配置容器启动后执行的命令,使用nohup使得java程序运行于后台,不至于命令行退出java程序终止。
ENTRYPOINT/CMD,一般两者可以配合使用,比如:
ENTRYPOINT ["/usr/sbin/sshd"] CMD ["-D"]
编译命令如下:
docker build -t maven-quiz .
编译过程如下:
Sending build context to Docker daemon 16.87MBStep 1/5 : FROM openjdk:8 ---> b8d3f94869bbStep 2/5 : VOLUME /tmp ---> Running in dd6790b892ccRemoving intermediate container dd6790b892cc ---> c22a0db1f2e0Step 3/5 : ADD ./target/maven-quiz.jar /app.jar ---> 3a7eb1b80968Step 4/5 : EXPOSE 8000 ---> Running in 95ea426741b7Removing intermediate container 95ea426741b7 ---> b472a3d4e0d5Step 5/5 : ENTRYPOINT ["nohup", "java", "-Dserver.port=8000", "-jar", "/app.jar", "&"] ---> Running in c95c9393b88fRemoving intermediate container c95c9393b88f ---> 48aa6f27aecfSuccessfully built 48aa6f27aecfSuccessfully tagged maven-quiz:latest
运行命令如下:
docker run -p 8000:8000 -itd maven-quiz
-docker run:运行容器
http://www.ruanyifeng.com/blog/2018/02/docker-tutorial.html
https://blog.csdn.net/zhezhebie/article/details/75501149
http://book.itmuch.com/3%20%E4%BD%BF%E7%94%A8Docker%E6%9E%84%E5%BB%BA%E5%BE%AE%E6%9C%8D%E5%8A%A1/3.6%20%E4%BD%BF%E7%94%A8Dockerfile%E6%9E%84%E5%BB%BADocker%E9%95%9C%E5%83%8F.html
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有