程序使用到动态库,如何打包程序的docker镜像
Docker 提供了一个可以运行你的应用程序的封套(envelope),或者说容器。它原本是 dotCloud 启动的一个业余项目,并在前些时候开源了。它吸引了大量的关注和讨论,导致 dotCloud 把它重命名到 Docker Inc。它最初是用 Go 语言编写的,它就相当于是加在 LXC(LinuX Containers,linux 容器)上的管道,允许开发者在更高层次的概念上工作。
Docker 扩展了 Linux 容器(Linux Containers),或着说 LXC,通过一个高层次的 API 为进程单独提供了一个轻量级的虚拟环境。Docker 利用了 LXC, cgroups 和 Linux 自己的内核。和传统的虚拟机不同的是,一个 Docker 容器并不包含一个单独的操作系统,而是基于已有的基础设施中操作系统提供的功能来运行的。这里有一个 Stackoverflow 的答案,里面非常详细清晰地描述了所有 Docker 不同于纯粹的 LXC 的功能特性
Docker 会像一个可移植的容器引擎那样工作。它把应用程序及所有程序的依赖环境打包到一个虚拟容器中,这个虚拟容器可以运行在任何一种 Linux 服务器上。这大大地提高了程序运行的灵活性和可移植性,无论需不需要许可、是在公共云还是私密云、是不是裸机环境等等。
Docker 由下面这些组成:
1. Docker 服务器守护程序(server daemon),用于管理所有的容器。
2. Docker 命令行客户端,用于控制服务器守护程序。
3. Docker 镜像:查找和浏览 docker 容器镜像。
如何打包创建镜像和运行Docker容器及常用命令
1. 安装 Docker在开始前,我们首先得确保在Linux主机中已经安装了Docker。这里,我运行的是CentOS 7 主机,我们将运行yum管理器和下面的命令来安装Docker。# yum install docker# systemctl restart docker.service2. 创建 Dockerfile现在,Docker守护进程已经在运行中了,我们现在准备创建自己的Firefox Docker容器。我们要创建一个Dockerfile,在其中我们要输入需要的配置来创建一个可以工作的Firefox容器。为了运行 Docker 镜像我们需要使用最新版本的CentOS。要创建 Docker 镜像,我们需要用文本编辑器创建一个名为Dockerfile的文件。# nano Dockerfile
如何将应用打包成为 Docker 镜像
当想让一个容器做两件事情,或者使一个Docker镜像包含来自两个不同镜像的依赖库时,就需要知道每个镜像的Dockerfile。本文介绍了如何通过docker history命令来对Docker镜像进行反向工程,得到它们的Dockerfile,并组织到一个Dockerfile里然后build,从而实现想做的事情。
常言道,逗不要重复发明轮子!地
在使用Docker时,构建自己的镜像之前,最好在Docker Hub寻找一些可以直接使用的镜像做练习。把软件架构分布到一系列容器中,每一个容器只做一件事情,这样的效果非常好。构建分布式应用的最好的基石是使用来自Docker Hub的官方镜像,因为可以信任它们的质量。
在某些情况下,可能想让一个容器做两件不同的事情。而在另外一些情况下,可能想让一个Docker镜像包含来自两个不同镜像的依赖库。如果有每个镜像的Dockerfile,这是非常简单的。将它们组织到一个Dockerfile里然后build就行。
然而,大多数时间都在使用Docker Hub上准备好的镜像,不会有它们的源Dockerfile。我花时间找一个可以合并(或flatten)两个不同Docker镜像的工具,当然没有它们的Dockerfile。也就是说在找一个能做下面这件事的东西:
如何打包创建镜像和运行Docker容器及常用命
在Dockerfile所在目录执行
docker build -t 10.10.36.213/library/你的镜像名:版本 .
别忘了最后的点,用来指定Dockerfile的位置
build过程类似这样:
cos@controller ~/Dockerfile/eureka $ docker build -t 10.10.36.213/library/test:v1.0 .
Sending build context to Docker daemon 78.69 MB
Step 1 : FROM 192.168.16.100/jdk8:8u74
--- d84b155276a9
Step 2 : MAINTAINER jingchaosong jingchao.song@tendcloud.com
--- Using cache
--- 369126ee2c40
Step 3 : ADD eureka-server-1.1-SNAPSHOT.jar /root/
--- Using cache
--- cd3facb762b3
Successfully built cd3facb762b3
push镜像
docker push 10.10.36.213/library/你的镜像名:版本
如果出现push失败的情况,并且提示需要的登录,请使用以下命令login到私有镜像仓库
docker login 10.10.36.213
用户名admin
密码Harbor12345
email可以不填
run容器
直接以daemon方式运行
docker run -d --net=mynet 10.10.36.213/library/你的镜像名:版本 命令
--net=mynet是让docker调用我们自己的网络插件来分配IP地址,IP地址从我们自己配置的IP池里获取
查看启动的容器的IP地址可以用以下命令
docker inspect container_id | grep IPAddress
交互方式运行
docker run -it --net=mynet 10.10.36.213/library/你的镜像名:版本
docker run的时候可以加很多参数,如容器的资源配额限制、hostname、挂载本地目录、DNS等配置,请参看docker run --help
查看容器状态
查看正在运行的容器的状态
docker ps
查看所有容器(包括已经Exit容器的状态)
docker ps -a
删除容器
docker rm container_id
container_id只需要前几位字符就可以了,只要能够区别不同容器即可,不需要输入全部ID字段
强制删除容器
docker rm -f container_id
删除镜像
docker rmi image_id
进入容器内部
前提是必须是正在运行的容器
docker exec -it container_id /bin/bash
运行exit退出
查看容器详细信息
docker inspect container_id
可以看到容器的配置信息和挂载的本地目录、网络配置、状态等
docker部署前端和后端打包程序
docker启动命令:
nginx.conf修改为:
程序更新:每次只需要把前端vue打包程序更新到/data2/geovis/docker_nginx/nginx_share_dir下即可。
Dockerfile文件内容:
start.sh内容(最后一个jar包不能后台运行,否则容器会自动退出):
构建docker镜像
启动geovis-jar容器:
程序更新:每次只需要docker restart geovis-jar重启容器即可。
docker 打包镜像命令
title: docker 打包镜像命令
date: 2020/02/20 14:52
1、在 docker 中添加 harbor(或者其他私服)的地址
2、登录远程仓库
3、拉取私服的镜像到本地仓库
4、查看镜像 id,并进行打包
5、copy 到需要部署的机器上,载入镜像