`

docker创建java web环境镜像

 
阅读更多
系统内核为ubuntu 3.19.0-15-generic
Docker 要求 linux 的内核版本高于 3.10

ubuntu 14.04


关于docker
docker是一个client-server结构的软件,用户通过client命令控制server端。client即为docker等命令,server为一个系统中的进程docker daemon。




docker daemon维护镜像及容器,用户通过client控制daemon通过镜像创建容器。普通用户可通过docker hub下载镜像,商业用户可通过专门的地方DTR(Docker trusted registry)下载

docker下载的镜像默认路径在/var/lib/docker下面

随着docker的升级完善,docker daemon拆分成下面几个模块



docker与virtual的区别:





docker hub(直译为docker枢纽):与源代码托管服务的github类似,dockerhub托管的是镜像

docker加速器:

Docker DataCenter:由DTR(Docker trusted registry)和 UCP(Docker universal Control Plane)这两个产品组成。对应 docker cloud 的产品就是 docker Hub(hub.docker.com)和Tutum by Docker 。
这是docker公司为了商业化,自己开发的产品或互联网应用。虽然docker是docker公司开发的,但docker是开源的,所以需要开发一系列为docker服务的产品及提供技术支持以获取利润
Docker DataCenter竞争产品有Kubernetes,Apache Mesos等


具体可见:http://dockone.io/article/1067


DockerEngine: 一个client-server 结构的应用, 包含Docker daemon,一个 用来和daemon 交互的REST API, 一个命令行应用CLI


本地操作docker命令关系图:






通过学习docker的过程,认识到了知识技术的传播者的可敬之处。如果单纯自己去学习国外的docker第一手文献,可能就不会去学了。向那些布道者致敬,更向技术的创建者致敬。





1.安装docker

2.安装javaweb环境

3.保存镜像

4.常用命令

5.遇到的问题



1.安装docker

1.1 验证os是否符合安装要求

首先查看ubuntu的版本,查看是否该版本是否可安装docker。安装docker,
内核最低为3.10(可通过uname -r查看),
linux架构为64位(uname -m查看i686表示32位)
sudo lsb_release -a





1.2 安装docker

国内用户如果没有vpn 可使用阿里云的安装脚本
curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh
安装成功后,提示如下:



表示安装成功了


1.3 配置镜像加速器,这里使用网易加速器

由于docker hub在国外,访问比较慢。配置镜像加速器

$ sudo echo "DOCKER_OPTS=\"\$DOCKER_OPTS --registry-mirror=http://hub-mirror.c.163.com\"" >> /etc/default/docker

$ service docker restart

关于国内加速器对比可见:
http://www.datastart.cn/tech/2016/09/28/docker-mirror.html







2 安装javaweb开发环境

2.1.创建基于ubuntu14.04镜像的容器
正常情况下,可以直接运行2.2,跳过2.1这一步。由于运行2.2的命令时,报了很多错,所以一步步精简命令调试

docker run ubuntu:14.04 /bin/bash

在本地查找ubuntu:14.04镜像,如果没有从registry下载



具体分析见:常见问题2


2.2.运行镜像ubuntu14.04的bash,进入容器终端的交互式环境
docker run -i -t -v /opt/oracle/firstdocker:/opt/oracle/firstdocker ubuntu:14.04 /bin/bash

这个命令表示进入ubuntu镜像的terminal的bash命令

请注意-与–的区别,由于中英文输入法的区别,导致在这里翻了跟头  
docker run –i –t –v /opt/oracle/firstdocker:/opt/oracle/firstdocker ubuntu:14.04 /bin/bash






-i:建立交互性连接,占用容器的标准输出(interactive)

-t:在容器中建立一个伪终端或者终端。(terminal)

-v:将主机的目录或者文件挂载为容器数据卷或者在容器中增加数据卷 (volumn)

可参见:
http://www.heblug.org/chinese_docker/userguide/dockerizing.html


2.3.下载安装jdk
进入容器终端后,下载安装jdk
run一些命令:

DEBIAN_FRONTEND=noninteractive apt-get -y install python-software-properties

DEBIAN_FRONTEND=noninteractive apt-get -y install software-properties-common

DEBIAN_FRONTEND=noninteractive add-apt-repository ppa:webupd8team/java

apt-get update

apt-get install oracle-java7-installer

java -version查看是否安装成功



2.4.下载安装tomcat(下载tomcat在宿主主机)
wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-7/v7.0.75/bin/apache-tomcat-7.0.75.tar.gz

由于网络原因下载失败,可以多试几次

tar -zxvf apache-tomcat-7.0.75.tar.gz

bin/startup.sh

--创建运行脚本在opt下run
vi runtomcat.sh

#!/bin/bash

source ~/.bashrc

sh /opt/oracle/firstdocker/apache-tomcat-7.0.75/bin/catalina.sh run






添加执行权限:
chmod u+x /opt/runtomcat.sh


2.4.1(下载tomcat在容器) 2.4为在宿主主机下载
如果2.4生成的镜像要移到其他宿主主机,需重新在宿主主机下载tomcat,不方便

进入容器的bash环境,新建文件夹/opt/oracle,下载tomcat

先现在wget
apt-get update
apt-get install wget

以下步骤同2.4,只是某些参数不同

run
wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-7/v7.0.76/bin/apache-tomcat-7.0.76.tar.gz

--创建运行脚本在opt下run
vi run.sh

#!/bin/bash

source ~/.bashrc

sh /opt/oracle/apache-tomcat-7.0.76/bin/catalina.sh run



添加执行权限:
chmod u+x /opt/run.sh


2.5.创建镜像
--退出容器run
exit

docker ps -a    



--提交刚才创建的包含jdk及tomcat的镜像(resp:tag[version]自定义)
docker commit -m "Added JDK Tomcat" -a "joe" elated_booth ubuntu/firstdocker:v1

docker images     验证是否创建成功

-m  描述
-a  作者
elated_booth   容器名称
ubuntu/firstdocker:v1   [REPOSITORY[:TAG]

Usage: docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]


2.6.映射端口号,启动并访问
docker run -d -p 8180:8080 -v /opt/oracle/firstdocker:/opt/oracle/firstdocker ubuntu/firstdocker:v1 /opt/runtomcat.sh

如果tomcat在镜像容器中(2.4.1),可不用映射硬盘:
docker run -d -p 8180:8080 ubuntu/tomcat76:v1 /opt/run.sh










3.保存镜像
备份镜像,以便移到其他镜像可以继续使用
1.上传到dockerhub(由于网络慢,忽略)

2.本地备份(save,load)
--保存
# docker save -o 自定义文件名.tar IMAGE_ID

--恢复
# docker load < 镜像名.tar

3.上传到阿里云等国内镜像中心

docker pull registry.cn-hangzhou.aliyuncs.com/study_2017/tomcat:v1

--修改tag
docker tag f856b98dda5a tomcat76:v1

--run
docker run -d -p 8180:8080 tomcat76:v1 /opt/run.sh









4.常用命令
docker ps -a 查看所有容器

docker ps    查看正在运行的容器

docker logs container_id   查看日志

docker stop container_id   停止容器

docker start container_id  启动容器

docker rm container_id      删除容器

docker port container_id  查看映射端口

docker commit    提交镜像

docker tag imageid name:tag   修改镜像

docker rmi image_id  删除镜像

docker rmi $(docker images -q)   删除所有镜像

docker stop $(docker ps -a -q)

docker rm $(docker ps -a -q)   删除所有停止的容器

Create a new image from a container's changes

  -a, --author=""     Author (e.g., "John Hannibal Smith <hannibal@a-team.com>")
  -c, --change=[]     Apply specified Dockerfile instructions while committing the image
  --help              Print usage
  -m, --message=""    Commit message
  -p, --pause=true    Pause container during commit

docker commit命令参考:
https://docs.docker.com/v1.11/engine/reference/commandline/commit/







5.遇到的问题
1.官方的方法对于国内用户而言,有时行不通
官方方法安装docker可能出现的错误-unused
如果有vpn,可直接通过官方方式下载安装。否则容易出现网络等错误

这是官方的安装docker方式:

root@ubuntu:~# wget -qO- https://get.docker.com/ | sh

报错1:
apparmor is enabled in the kernel and apparmor utils were already installed
+ sh -c sleep 3; apt-get update
E: Could not get lock /var/lib/apt/lists/lock - open (11: Resource temporarily unavailable)
E: Unable to lock directory /var/lib/apt/lists/

原因分析:
apt-get进程被占用

解决方案:
sudo rm -vf /var/lib/apt/lists/*
sudo apt-get update

再执行:
wget -qO- https://get.docker.com/ | sh



报错2:
Fetched 4,540 kB in 34min 30s (2,192 B/s)
W: Failed to fetch http://security.ubuntu.com/ubuntu/dists/trusty-security/multiverse/source/Sources  Hash Sum mismatch

W: Failed to fetch http://security.ubuntu.com/ubuntu/dists/trusty-security/main/binary-amd64/Packages  Hash Sum mismatch

W: Failed to fetch http://security.ubuntu.com/ubuntu/dists/trusty-security/restricted/binary-amd64/Packages  Hash Sum mismatch

W: Failed to fetch http://security.ubuntu.com/ubuntu/dists/trusty-security/main/binary-i386/Packages  Hash Sum mismatch

W: Failed to fetch http://security.ubuntu.com/ubuntu/dists/trusty-security/main/i18n/Translation-en  Hash Sum mismatch

W: Failed to fetch http://security.ubuntu.com/ubuntu/dists/trusty-security/multiverse/i18n/Translation-en  Hash Sum mismatch

W: Failed to fetch http://security.ubuntu.com/ubuntu/dists/trusty-security/universe/i18n/Translation-en  Hash Sum mismatch

E: Some index files failed to download. They have been ignored, or old ones used instead.

原因分析:
所使用的网络供应商,会缓存一些之前访问或下载的信息,以便减少流量出口。导致下载的信息与最新的数据不一致,出现校验错误

解决方案:
sudo rm -fR /var/lib/apt/lists/*

sudo mkdir /var/lib/apt/lists/partial

sudo apt-get update

再执行:
wget -qO- https://get.docker.com/ | sh


可能任然不能报错


2.下载镜像出错,已经配置了加速器,貌似加速器没有生效?
docker run ubuntu:14.04 /bin/bash

Unable to find image 'ubuntu:14.04' locally
docker: Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled (Client.Timeout exceeded while awaiting headers).
See 'docker run --help'.
这里试了好几次都没有成功,报https://registry-1.docker.io/v2/ 连接失败,第二天重试又好了。难道是配置加速器后要重启。(应该是人品比较好,正好连上了)

为什么加速器没有起作用?


3.运行tomcat的错误方式
docker run -d -p 8180:8080 -v /opt/oracle/firstdocker:/opt/oracle/firstdocker --name firstwebapp ubuntu/firstdocker:v1 /opt/oracle/firstdocker/apache-tomcat-7.0.75/bin/startup.sh

docker logs container_id  查看启动日志没有报错


但是查看容器docker ps -a,总是退出的 exited

这是因为run -d 以守护进程运行,必须有一个前台程序
容器运行的命令如果不是那些一直挂起的命令(比如运行top,tail),就是会自动退出的

启动完后就退出了容器

所以需要添加运行脚本/opt/runtomcat.sh

具体可参考:
http://blog.simcu.com/archives/467



参考文献:
https://github.com/widuu/chinese_docker/blob/master/installation/ubuntu.md

http://tech.meituan.com/docker_introduction.html

https://yeasy.gitbooks.io/docker_practice/content/introduction/what.html

http://cxytiandi.com/blog/detail/5817

https://github.com/docker/docker/issues/5383

http://www.infoq.com/cn/news/2017/02/Docker-Containerd-RunC?utm_source=news_about_Dockers&utm_medium=link&utm_campaign=Dockers

http://seanlook.com/2014/10/31/docker-command-best-use-1/

源码类分析:
http://blog.daocloud.io/how-to-master-docker-image/

http://www.infoq.com/cn/articles/docker-source-code-analysis-part1


拓展阅读:
http://www.36dsj.com/archives/70459   Docker生态会重蹈Hadoop的覆辙吗?

http://www.infoq.com/cn/news/2017/01/DockerChange-ContainerEcosys-mi
  • 大小: 29.8 KB
  • 大小: 12.8 KB
  • 大小: 60 KB
  • 大小: 307.3 KB
  • 大小: 21.6 KB
  • 大小: 20.7 KB
  • 大小: 8.8 KB
  • 大小: 7.1 KB
  • 大小: 67.6 KB
  • 大小: 5.1 KB
  • 大小: 162.6 KB
  • 大小: 8.4 KB
  • 大小: 97 KB
分享到:
评论

相关推荐

    docker部署Java项目流程

    Docker 部署 Java 项目流程 Docker 是一个开源的应用容器引擎,基于 Go 语言开发并遵从 Apache2.0 协议开源。使用 Docker 可以让开发者封装他们的应用以及依赖包到一个可移植的容器中,然后发布到任意的 Linux 机器...

    详解使用Docker搭建Java Web运行环境

    镜像—Docker的镜像和常见的系统ISO镜像类似,包含了应用程序的信息; 容器—容器相当于一个可以运行起来的虚拟机,应用程序运行在容器中,Docker运行在“Docker”上; 仓库—仓库是存放镜像的地方,有类似git的版本...

    docker 安装与部署,使用docker部署java 微服务, 使用docker运行gpu 镜像

    docker 安装操作说明文档,部署web应用; 使用docker运行gpu 镜像,共享宿主机 显存

    免费开源Java 基础镜像

    或者,您也可以使用 Docker 为 Java 映像重新创建 Docker 构建: docker run -it --rm -v `pwd`:/fp fabric8/fish-pepper Java 基础镜像有不同的风格: 基于CentOS 7或 Alpine Linux(实验性)或Red Hat 通用基础...

    Docker学习笔记之Docker部署Java web系统

    Docker部署Java Web系统  1.在root目录下创建一个路径test/app mkdir test && cd test&& mkdir app &&cd app 2.将apache-tomcat-7.0.29.tar.gz及jdk-7u25-linux-x64.tar.gz拷贝 到app目录下 3.解压两个tar.gz文件 ...

    Api-docker-java.zip

    Api-docker-java.zip,Java DOCKER API Cclipse,一个api可以被认为是多个软件设备之间通信的指导手册。例如,api可用于web应用程序之间的数据库通信。通过提取实现并将数据放弃到对象中,api简化了编程。

    docker安装jenkins部署并且自动化打包部署java服务

    1. 准备 Docker 环境 在安装 Docker 之前,需要清除之前的版本,然后添加 Docker 国内源,最后安装 Docker。Docker 要求 CentOS 系统的内核版本高于 3.10,可以使用 uname -a 命令来查看 CentOS 的内核版本。 2. ...

    基于Java+GitLab+Jenkins与Docker的自动化考试系统后端源码.zip

    注意:最新版本的Jenkins官方Docker镜像缺少docker二进制文件所依赖的运行库libltdl,需要使用apt install libltdl-dev进行安装 其他:由于Jenkins Workspace中的文件均为临时性文件,当磁盘负担较重时可以使用-v /...

    可直接运行的Java web jar 镜像

    可以直接运行的Javaweb jar 镜像。先加载.tar压缩包为镜像,然后运行命令: docker run -d myapp:v1.0 -p 8088:8088 /bin/bash

    Gitllab+Jenkins+Docker+Harbor 自动化部署流程

    在自动化部署流程中,Harbor 负责存储和管理 Docker 镜像,并提供了一个安全的环境来部署应用程序。 五、 自动化部署流程 自动化部署流程的主要步骤包括: 1. 代码提交:开发者将代码提交到 Gitllab 服务器上。 2...

    docker部署nginx,挂载多个前端部署目录以及跨域问题解决方案.txt

    为了节约成本,很多时候一台server 的nginx可能要部署多个前端的情况,本实例是在docker环境下部署两个前端,同时处理前端调用后端跨域问题,本示例为阿里云centos7 系统docker20.10.6环境下nginx1.19.5版本 ...

    创建Web项目的Docker镜像实例讲解

    最近做个项目,创建web项目的Docker镜像,经过一番折腾终于做出来了,这里记录下,也希望读者能少走点弯路!以下就是资料整理! 基于Java,Mongodb,Tomcat的Supplierprofile项目 禁用selinux vi etc/selinux/...

    将docker-harbor镜像部署到k8s集群-node部署时需harbor认证

    "docker-harbor镜像部署到k8s集群-node部署时需harbor认证" docker-harbor镜像部署到k8s集群-node部署时需harbor认证,这是一种常见的云原生部署场景。下面我们将详细地解释该过程中涉及到的知识点。 1. 部署YAML...

    Java_web开发实战1200

    根据提供的文件信息,我们可以深入探讨Java Web开发的相关知识点。尽管原始描述中提到的是一个包含具体实例的资源集合,但在此我们将基于这些信息构建一个全面的知识框架,覆盖Java Web开发的关键领域。 ### Java ...

    Docker视频教程.txt

    P1010_Docker配置阿里云镜像仓库 P1111_Docker基本命令 P1212_Docker镜像操作命令 P1313_Docker容器操作基本命令 P1414_Docker容器操作进阶命令 P1515_Docker容器宿主机端口映射 P1616_Docker commit提交运行...

    阿里云服务器ECS建站教程web环境搭建

    2. Java Web环境搭建:Java Web环境通常指的是在服务器上配置Java运行环境和Web服务器(如Tomcat),以及数据库(如MySQL),使得Java应用能够正常运行并提供Web服务。 3. Docker部署:Docker是一个开源的应用容器...

    编写docker-compose.yml搭建mysql+tomcat环境

    docker-compose 快速搭建javaweb开发环境,包含mysql和tomcat镜像,适合java web开发者

    docker-activemq:Apache ActiveMQ 的 Docker 镜像

    自述文件的 Dockerfile描述ActiveMQ 版本 - 5.9.0样板文件基于 Ubuntu 14.04 将自动更新和升级 Linux 软件包... 来自 Apache 的默认配置文件包含在此存储库中用法构建图像从 Dockerfile 构建镜像sudo docker build

Global site tag (gtag.js) - Google Analytics