docker里边安装ubuntu启动jar文件

时光毁灭记忆、已成空白 提交于 2020-08-13 04:27:53

下载基础镜像

测试:

用ubuntu镜像输出hello world 如果没有ubuntu镜像,docker会默认给下载个最新的ubuntu镜像

docker run ubuntu echo 'hello world'

以交互式运行

docker run -i -t ubuntu /bin/bash   #

-i --interactive=ture|false 默认是false 始终打开标准输入
-t --tty=true|false 默认是false 为docker分配个伪tty终端

这样新创建的容器才能提供个交互式的shell

在ubuntu容器中就和在ubuntu服务器一样 执行ps -ef 测试 exit退出

docker attach 容器id能进去容器

ctrl+q+p能退出后台执行容器
添加各种依赖
  1. 添加ppa仓库 这个是OpenJDK 8 ppa仓库。

     add-apt-repository ppa:openjdk-r/ppa
    
  2. 更新ubuntu的下载指令

     apt-get update  
    
  3. 安装openjdk8

     apt-get install openjdk-8-jdk
    
  4. 安装curl

     apt install curl
    
  5. 安装vim

     apt-get install -y vim
    
  6. 安装sz rz

     apt-get install lrzsz
    
  7. 安装net指令库

     apt install net-tools
    
     解决:用ifconfig查看
    
  8. 安装zip unzip

     apt-get install unzip
    
     apt-get install zip
    
对于已经建立的docker容器,需要新增容器对主机的端口映射,主要分为三种:
通过修改配置文件修改docker容器端口映射
  1. 使用docker ps -a命令找到要修改容器的CONTAINER ID

  2. 运行以下命令,进入该容器目录

    docker inspect【CONTAINER ID】| grep Id

    cd /var/lib/docker/containers

  3. 停止容器

    docker stop [容器id]

  4. 停止主机docker服务

     systemctl stop docker
    
  5. 进入2得到的文件夹内,修改hostconfig.json 和 config.v2.json

    vi hostconfig.json

     比如新增一个 80 端口,在PortBindings下边添加以下内容,端口配置之间用英文字符逗号隔开
    
     "80/tcp": [ 
     {
      "HostIp": "0.0.0.0",
      "HostPort": "80"
      }
     ]
     接着修改vi config.v2.json, 找到ExposedPorts和Ports  仿照之前内容添加端口映射
     "ExposedPorts":  {
     	"2000/tcp":   {}
     },
    
     "Ports":{
        "2000/tcp":[
     		{
     		 "HostIp": "0.0.0.0",
     		 "HostPort":  "2000"
     		 }
     ]
     },
    
  6. 保存之后重启docker服务和容器

     systemctl start docker
    
     docker start [docker id]
    
把运行中的容器生成新的镜像,再新建容器
  1. 提交一个运行中的容器为镜像

    docker commit [containerid] [new_imagename]

  2. 运行新建的镜像并添加端口映射(宿主机8000映射到docker的8080)

    docker run --name newcontainername -d -p 8000:8080 [imagename] /bin/sh

修改主机iptables端口映射

docker的端口映射并不是在docker技术中实现的,而是通过宿主机的iptables来实现。通过控制网桥来做端口映射,类似路由器中设置路由端口映射。

如果我们有一个容器的8000端口映射到主机的9000端口,先查看iptabes设置了什么规则:

sudo iptables -t nat -vnL

结果中有一条:

Chain DOCKER (2 references)
pkts bytes target prot opt in     out     source        destination         
 98  5872 RETURN  all  --  docker0 *     0.0.0.0/0     0.0.0.0/0           
237 14316 DNAT    tcp  --  !docker0 *    0.0.0.0/0    0.0.0.0/0    tcp dpt:9000 to:172.17.0.3:8000

我们可以看到docker创建了一个名为DOKCER的自定义的链条Chain。而我开放8000端口的容器的ip是172.17.0.3。

也可以通过inspect命令查看容器ip

docker inspect [containerId] |grep IPAddress

我们想再增加一个端口映射,比如8081->81,就在这个链条是再加一条规则:

sudo iptables -t nat -A  DOCKER -p tcp --dport 8081 -j DNAT --to-destination 172.17.0.3:81

加错了或者想修改:先显示行号查看

sudo iptables -t nat -vnL DOCKER --line-number

删除规则3

sudo iptables -t nat -D DOCKER 3
容器常用命令

停止容器

docker stop 容器名称或id

启动容器

docker start 容器名称或id
使用之前构建的容器修改映射端口重新构建镜像和容器

例子:(第一种尝试不成功第二种成功)

docker ps可以查看运行的容器 加-a可以看已停止的容器

以运行的容器id 1f65f1ecc62d 构建新镜像image1

docker commit 1f65f1ecc62d image1

以image1镜像构建运行的容器tommao

docker run --name tommao -p 8089:8080 -i -t image1 /bin/bash

进入运行的容器

docker attach tommao

启动java项目

nohup java -jar demo-0.0.1-SNAPSHOT.jar >/dev/null &

Ctrl+q+p退出后台运行容器

启动后按回车别按ctrl +c那是终止命令
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!