当前位置: 首页 > 新闻资讯 > docker容器专业部署安装问题处理环境搭建技术咨询支持

docker容器专业部署安装问题处理环境搭建技术咨询支持

发布时间:2024-04-11 22:45:33

  1. Docker容器中安装Docker
  2. docker中容器有必要挂载到主机上吗存储
  3. Docker是什么Docker的安装和卸载Docker中关于镜像的基本操作

一、Docker容器中安装Docker

最近用到jenkins,使用了docker来提供服务,但是在构建步骤中又希望能够使用docker去生成镜像,因此需要实现在docker容器中去安装docker,其实也就是在特定的系统环境下安装docker,但是实际操作中可能还会出现其他问题。

以jenkins/jenkins容器为例子。

进入jenkins容器:

一般安装前都需要知道当前系统信息,没有安装lsb-core,因此执行:

我在第一次查询时候也看不出来是用的哪个系统以及版本,猜测应该为debian。

因为原来的配置的源速度太慢(无效?),因此执行apt-get update都会失败,所以无法去安装新的软件。所以需要先更改源配置,这个过程中我找到了不少配置信息,但是基本都因为key过期等原因不能够使用。这里推荐一个很好的网站,会每隔四小时发布debian的源地址:

备份linux的源配置文件:

修改源配置信息(因为没有安装vim,只能通过>方式将地址写入文件)

然后安装vim,方便后面查看等操作。

编辑sources.list 文件,配置完整地址。

同样安装lsb-core,安装完成后可以使用lsb_release -a查看系统版本。

接下来就是安装docker,这里我们已经知道是在debian环境下安装docker,可以参考菜鸟的步骤:

二、docker中容器有必要挂载到主机上吗存储

例如docker run -it -v /data --name container1 busybox ); 和挂载到主机(例如docker run -it --name container1 -v /path/on/host:/datavol busybox )但是为了使容量在容器重启甚至容器交换(旧容器被删除,创build/启动新容器)中保持不变,这两种方法都不会将卷挂载到主机上吗? 换句话说,如果我没有通过“简单安装方法”明确地挂载到主机,那么卷的实际安装位​​置在哪里? 而且这个位置如何在容器交换中生存呢?而且,在这两种情况下,我都假定卷只是给定主机的本地卷,并且如果有一个swarm或群集运行在多个主机上,则无法使用这些命令,以便在不同主机上运行的容器可以访问这些卷,是吗? (而且我猜这是data volume containers发挥的作用,对吧?)提前致谢!这两种方法都不能将卷挂载到主机上?是的,这两种方法都基于容器生命周期中保存的主机目录。使用这些命令获取更多信息:docker volume ls docker volume inspect <volume-id> # and docker inspect <container-id>(方法1)实际安装量在哪里?做这个:docker inspect <container-id>你的答案在“来源”中:"mounts": [ { "type": "volume", "name": "96f5e6531480cc716cd030f3f60f8927a55728a52d55ad55589752c2b89f2001", "source": "/var/lib/docker/volumes/96f5e6531480cc716cd030f3f60f8927a55728a52d55ad55589752c2b89f2001/_data", "destination": "/data", "driver": "local", "mode": "", "rw": true, "propagation": "" } ],请注意,如果您在osx或windows中,则该source指的是运行docker的vm内部的本地目录。而且这个位置如何在容器交换中生存呢?他们生存,因为他们是基于主机的本地目录(他们是卷,因此它们存在)。如果在多个主机上运行swarm或群集,则无法使用这些命令,以便运行在不同主机上的容器可以访问这些卷,是的?您对简单的卷configuration是正确的。 这是docker变得棘手,持久的地方。 您可以在主机文件系统级别实现共享目录,然后将其作为卷装载到容器中,以便跨群集主机获取共享卷。https://docs.docker.com/engine/tutorials/dockervolumes/#mount-a-shared-storage-volume-as-a-data-volume使用php在shell中运行docker运行或重新启动postgresql映像后,docker容器立即退出在centos7上暴露docker remote api v1.22在docker上的terminal上安装gambit绑定的文件夹的内容不可用docker nginx错误在安assembly置文件docker(带有systemctl的centos 7):无法安装tmpfs&cgroup如何使用rabbitmq docker撰写yml文件来构builddocker镜像?docker-compose找不到新的节点模块mongodb使用具有持久存储问题的docker分片群集在docker中将“named volume”挂载为非root用户

三、Docker是什么Docker的安装和卸载Docker中关于镜像的基本操作

docker是什么?

docker是一个虚拟环境容器,可以将你的开发环境、代码、配置文件等一并打包到这个容器中,并发布和应用到任意平台中。比如,你在本地用python开发网站后台,开发测试完成后,就可以将python3及其依赖包、flask及其各种插件、mysql、nginx等打包到一个容器中,然后部署到任意你想部署到的环境。

docker官方文档比较全,建议有能力的读一下官方文档。

docker的三个概念

1、镜像(image):类似于虚拟机中的镜像,是一个包含有文件系统的面向docker引擎的只读模板。任何应用程序运行都需要环境,而镜像就是用来提供这种运行环境的。例如一个ubuntu镜像就是一个包含ubuntu操作系统环境的模板,同理在该镜像上装上apache软件,就可以称为apache镜像。

2、容器(container):类似于一个轻量级的沙盒,可以将其看作一个极简的linux系统环境(包括root权限、进程空间、用户空间和网络空间等),以及运行在其中的应用程序。docker引擎利用容器来运行、隔离各个应用。容器是镜像创建的应用实例,可以创建、启动、停止、删除容器,各个容器之间是是相互隔离的,互不影响。注意:镜像本身是只读的,容器从镜像启动时,docker在镜像的上层创建一个可写层,镜像本身不变。

3、仓库(repository):类似于代码仓库,这里是镜像仓库,是docker用来集中存放镜像文件的地方。注意与注册服务器(registry)的区别:注册服务器是存放仓库的地方,一般会有多个仓库;而仓库是存放镜像的地方,一般每个仓库存放一类镜像,每个镜像利用tag进行区分,比如ubuntu仓库存放有多个版本(12.04、14.04等)的ubuntu镜像。

docker的安装和卸载

docker可以安装在windows、linux、mac等各个平台上。具体可以查看文档install docker。安装完成之后,可以查看docker的版本信息:

[root@xxx ~]# docker version

client:

version: 1.12.3

api version: 1.24

go version: go1.6.3

git commit: 6b644ec

built:

os/arch: linux/amd64

server:

version: 1.12.3

api version: 1.24

go version: go1.6.3

git commit: 6b644ec

built:

os/arch: linux/amd64

查看docker的帮助信息:# docker --help。各种命令的用法也不再赘述,后边用到哪些命令时会作出一定的解释。

docker中关于镜像的基本操作

安装完docker引擎之后,就可以对镜像进行基本的操作了。

我们从官方注册服务器(https://hub.docker.com)的仓库中pull下centos的镜像,前边说过,每个仓库会有多个镜像,用tag标示,如果不加tag,默认使用latest镜像:

[root@xxx ~]# docker search centos # 查看centos镜像是否存在

[root@xxx ~]# docker pull centos # 利用pull命令获取镜像

using default tag: latest

latest: pulling from library/centos

08d48e6f1cff: pull complete

digest: sha256:b2f9d1c0ff5f87a4743104d099a3d561002ac500db1b9bfa02a783a46e0d366c

status: downloaded newer image for centos:latest

[root@xxx ~]# docker images # 查看当前系统中的images信息

repository tag image id created size

centos latest 0584b3d2cf6d 9 days ago 196.5 mb

以上是下载一个已有镜像,此外有两种方法可以帮助你新建自有镜像。

(1)利用镜像启动一个容器后进行修改 ==> 利用commit提交更新后的副本

[root@xxx ~]# docker run -it centos:latest /bin/bash # 启动一个容器

[root@72f1a8a0e394 /]# # 这里命令行形式变了,表示已经进入了一个新环境

[root@72f1a8a0e394 /]# git --version # 此时的容器中没有git

bash: git: command not found

[root@72f1a8a0e394 /]# yum install git # 利用yum安装git

......

[root@72f1a8a0e394 /]# git --version # 此时的容器中已经装有git了

git version 1.8.3.1

此时利用exit退出该容器,然后查看docker中运行的程序(容器):

[root@xxx ~]# docker ps -a

container id image command created status ports names

72f1a8a0e394 centos:latest "/bin/bash" 9 minutes ago exited (0) 3 minutes ago angry_hodgkin

这里将容器转化为一个镜像,即执行commit操作,完成后可使用docker images查看:

[root@xxx ~]# docker commit -m "centos with git" -a "qixianhu" 72f1a8a0e394 xianhu/centos:git

[root@xxx ~]# docker images

repository tag image id created size

xianhu/centos git 52166e4475ed 5 seconds ago 358.1 mb

centos latest 0584b3d2cf6d 9 days ago 196.5 mb

其中,-m指定说明信息;-a指定用户信息;72f1a8a0e394代表容器的id;xianhu/centos:git指定目标镜像的用户名、仓库名和 tag 信息。注意这里的用户名xianhu,后边会用到。

此时docker引擎中就有了我们新建的镜像xianhu/centos:git,此镜像和原有的centos镜像区别在于多了个git工具。此时我们利用新镜像创建的容器,本身就自带git了。

[root@xxx ~]# docker run -it xianhu/centos:git /bin/bash

[root@520afc596c51 /]# git --version

git version 1.8.3.1

利用exit退出容器。注意此时docker引擎中就有了两个容器,可使用docker ps -a查看。

(2)利用dockerfile创建镜像

dockerfile可以理解为一种配置文件,用来告诉docker build命令应该执行哪些操作。一个简易的dockerfile文件如下所示,官方说明:dockerfile reference:

-# 说明该镜像以哪个镜像为基础

from centos:latest

-# 构建者的基本信息

maintainer xianhu

-# 在build这个镜像时执行的操作

run yum update

run yum install -y git

-# 拷贝本地文件到镜像中

copy ./* /usr/share/gitdir/

有了dockerfile之后,就可以利用build命令构建镜像了:

[root@xxx ~]# docker build -t="xianhu/centos:gitdir" .

其中-t用来指定新镜像的用户信息、tag等。最后的点表示在当前目录寻找dockerfile。

构建完成之后,同样可以使用docker images命令查看:

[root@xxx ~]# docker images

repository tag image id created size

xianhu/centos gitdir 0749ecbca587 34 minutes ago 359.7 mb

xianhu/centos git 52166e4475ed about an hour ago 358.1 mb

centos latest 0584b3d2cf6d 9 days ago 196.5 mb

以上就是构建自己镜像的两种方法。其中也涉及到了容器的一些操作。如果想删除容器或者镜像,可以使用rm命令,注意:删除镜像前必须先删除以此镜像为基础的容器。

[root@xxx ~]# docker rm container_name/container_id

[root@xxx ~]# docker rmi image_name/image_id

镜像其他操作指令:

[root@xxx ~]# docker save -o centos.tar xianhu/centos:git # 保存镜像, -o也可以是--output

[root@xxx ~]# docker load -i centos.tar # 加载镜像, -i也可以是--input

docker中关于容器的基本操作

在前边镜像的章节中,我们已经看到了如何基于镜像启动一个容器,即docker run操作。

[root@xxx ~]# docker run -it centos:latest /bin/bash

这里-it是两个参数:-i和-t。前者表示打开并保持stdout,后者表示分配一个终端(pseudo-tty)。此时如果使用exit退出,则容器的状态处于exit,而不是后台运行。如果想让容器一直运行,而不是停止,可以使用快捷键 ctrl+p ctrl+q 退出,此时容器的状态为up。

除了这两个参数之外,run命令还有很多其他参数。其中比较有用的是-d后台运行:

[root@xxx ~]# docker run centos:latest /bin/bash -c "while true; do echo hello; sleep 1; done"

[root@xxx ~]# docker run -d centos:latest /bin/bash -c "while true; do echo hello; sleep 1; done"

这里第二条命令使用了-d参数,使这个容器处于后台运行的状态,不会对当前终端产生任何输出,所有的stdout都输出到log,可以使用docker logs container_name/container_id查看。

启动、停止、重启容器命令:

[root@xxx ~]# docker start container_name/container_id

[root@xxx ~]# docker stop container_name/container_id

[root@xxx ~]# docker restart container_name/container_id

后台启动一个容器后,如果想进入到这个容器,可以使用attach命令:

[root@xxx ~]# docker attach container_name/container_id

删除容器的命令前边已经提到过了:

[root@xxx ~]# docker rm container_name/container_id

docker中关于仓库的基本操作

docker官方维护了一个dockerhub的公共仓库,里边包含有很多平时用的较多的镜像。除了从上边下载镜像之外,我们也可以将自己自定义的镜像发布(push)到dockerhub上。

在镜像操作章节中,我们新建了一个xianhu/centos:git镜像。

(1)访问https://hub.docker.com/,如果没有账号,需要先注册一个。

(2)利用命令docker login登录dockerhub,输入用户名、密码即可登录成功:

[root@xxx ~]# docker login

login with your docker id to push and pull images from docker hub. if you don't have a docker id, head over to https://hub.docker.com to create one.

username: xianhu

password:

login succeeded

(3)将本地的镜像推送到dockerhub上,这里的xianhu要和登录时的username一致:

[root@xxx ~]# docker push xianhu/centos:git # 成功推送

[root@xxx ~]# docker push xxx/centos:git # 失败

the push refers to a repository [docker.io/xxx/centos]

unauthorized: authentication required

(4)以后别人就可以从你的仓库中下载合适的镜像了。

[root@xxx ~]# docker pull xianhu/centos:git

对应于镜像的两种创建方法,镜像的更新也有两种:

创建容器之后做更改,之后commit生成镜像,然后push到仓库中。

更新dockerfile。在工作时一般建议这种方式,更简洁明了。

这里再一次回顾一下三个重要的概念:镜像、容器、仓库:

从仓库(一般为dockerhub)下载(pull)一个镜像,docker执行run方法得到一个容器,用户在容器里执行各种操作。docker执行commit方法将一个容器转化为镜像。docker利用login、push等命令将本地镜像推送(push)到仓库。其他机器或服务器上就可以使用该镜像去生成容器,进而运行相应的应用程序了。

利用docker创建一个用于flask开发的python环境

上边已经解释和练习了docker的基本操作命令,下边以实例的形式完整走一遍流程。

我们创建一个用于flask开发的python环境,包含git、python3、flask以及其他依赖包等。

完整命令如下:

[root@xxx ~]# docker pull centos

[root@xxx ~]# docker run -it centos:latest /bin/bash

-# 此时进入容器,安装python3、git、flask及其依赖包等,安装完成后exit退出

[root@xxx ~]# docker commit -m "flask" -a "xianhu" container_id xianhu/flask:v1

[root@xxx ~]# docker push xianhu/flask:v1

docker的功能和特性还有很多,各种运行命令、参数等也都有待学习和练习,比如如何管理数据、如何管理网络、如何互相配合工作、如何编写更专业的dockerfile等。本文先入门为主,以后有时间再慢慢更新关于docker的知识。

Top