Docker总结(配合阿里云容器镜像服务)「建议收藏」

Docker总结(配合阿里云容器镜像服务)「建议收藏」Docker是个很好的工具,刚开始用觉得还没虚拟环境好用,随着深入了解,越发觉得Docker好用,今天就来总结一下使用心得。一、Docker基础1、背景知识1)docker是什么?Docker属于Linux容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的Linux容器解决方案。Docker将应用程序与该程序的依赖,打包在一个文件里面。运行这个…

大家好,又见面了,我是你们的朋友全栈君。

Docker是个很好的工具,刚开始用觉得还没虚拟环境好用,随着深入了解,越发觉得Docker好用,今天就来总结一下使用心得。

一、Docker基础

1、背景知识

1)docker是什么?

      Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。

Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。总体来说,Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。

注册服务器(repository),仓库(registry),镜像(image),容器(container)之间的关系:注册服务器主要是用来存放仓库的服务器,在一个服务器上有多个仓库,而仓库又可以分为公共仓库和私有仓库,一个仓库里面有可以有多个镜像,而容器则是镜像的一个实例

    下图是docker组件:

图3

      Docker之所以火的很快,原因之一就是它的仓库。仓库类似于github,很多现成的镜像供各位下载,直接用docker pull redis-server(这个名字是瞎起的)就可以拉下来一个redis服务器的镜像,放到自己的docker里就能用了,不用自己解决依赖、安装redis。好多开源工具都有docker镜像,这就使得用户只需要下载使用就行,完全省去了处理软件依赖、缺少库文件、安装部署等环节。

2) docker用途,目前有三大类

(1)提供一次性的环境。比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。

(2)提供弹性的云服务。因为 Docker 容器可以随开随关,很适合动态扩容和缩容。

(3)组建微服务架构。通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构。

2、docker安装:

1)Windows安装,推荐使用win10,参考我的另一篇博客—windows10安装docker以及挂在在pycharm

2)Mac安装,参考博客—Mac平台上Docker安装与使用

3)  Centos安装

    在centos下,如果有epel源直接yum install docker-io就完成安装了。

    图2

    /etc/init.d/docker start启动docker。

4)Ubuntu安装

    sudo apt-get remove debian-keyringdebian-archive-keyring

    sudo apt-get clean

    sudo apt-get update && sudo apt-get-y install debian-keyring debian-archive-keyring

    wget -qO- https://get.Docker.com/ | sh

    注:如果ubuntu启用了ufw,要配置使其能转发请求,并允许2375端口访问外网。

3、docker命令

在知道docker命令之前,有必要弄清楚镜像和容器的差别,简单来说,镜像(Image)就是一堆只读层(read-only layer)的统一视角; 容器 = 镜像 + 读写层

详细可参考我的另一篇文章—docker容器和镜像区别

以下命令最好使用管理员权限运行,避免出错。

1、镜像

1)获取镜像:docker pull  images-name

2)查看所有镜像:docker images 

3)删除镜像:docker rmi image-id

4)保存镜像:docker commit -m=”description about images” –author=”author” {container_id}  {repository/images_name:tag}

5)推送镜像到代码仓库(可以后面的阅读完在看这个),以阿里云docker平台为例:

①  docker login --username=your_username registry.cn-beijing.aliyuncs.com
②  docker tag [ImageId] registry.cn-beijing.aliyuncs.com/[命名空间]/[仓库名称]:[镜像版本号]
③  docker push registry.cn-beijing.aliyuncs.com/[命名空间]/[仓库名称]:[镜像版本号]

6)使用Dockerfile创建新的镜像(注意:末尾有一个点,表示当前路径):docker build -t “repository/images_name:tag” .    

2、容器

docker start 容器id
docker stop 容器id
docker exec -it 容器id /bin/bash  # 进入容器
docker cp 宿主机绝对路径  容器id:路径   # 宿主机和docker容器之间复制文件 

# 关于删除容器:

方法一:

#显示所有的容器,过滤出Exited状态的容器,取出这些容器的ID,

sudo docker ps -a|grep Exited|awk ‘{print $1}’

#查询所有的容器,过滤出Exited状态的容器,列出容器ID,删除这些容器

sudo docker rm `docker ps -a|grep Exited|awk ‘{print $1}’`

方法二: 

#删除所有未运行的容器(已经运行的删除不了,未运行的就一起被删除了)

sudo docker rm $(sudo docker ps -a -q)

方法三:

#根据容器的状态,删除Exited状态的容器

sudo docker rm $(sudo docker ps -qf status=exited)

方法四:

#Docker 1.13版本以后,可以使用 docker containers prune 命令,删除孤立的容器。

sudo docker container prune  (推荐)

图5

指定映射最常用的是第一种,直接指定宿主端口:容器端口;

第二种,假如宿主有多个ip的话,让容器的端口绑定到宿主的固定一个ip的端口上;

第三种,只绑定宿主ip,端口随机取;

第四种,它的意思是一条docker run命令可以同时用多次”-p”参数,指定多个端口映射关系,比如,docker run –d –p 99:80 –p 33:443 –name mynginx33 nginx

Docker总结(配合阿里云容器镜像服务)「建议收藏」

启动容器时用-P(大写)参数,表示让容器随机对应一个宿主机的端口,如上,容器的80端口对应宿主的32768端口,容器的443对应宿主的32769端口。

比如我的宿主ip是192.168.0.55,这时候在宿主机的浏览器输入192.168.0.55:32768就可以访问到docker容器里的nginx应用了。

端口随机映射的好处是:端口不会冲突。难点是,生产中还得用脚本或者其他方式获取到这个随机的端口,由于它是变化的,所以脚本必须得适应这种变化性。

图6

用小p来手动指定端口映射,如上所示,将容器的80端口映射到宿主的91端口上,而443没有指定映射关系,所以443不可访问。

二、制作自己的Docker镜像

自己制作的docker我都推送到了阿里云docker管理平台了,而不是推送到docker官方的管理平台。下面首先介绍一下使用阿里云docker管理平台创建自己的仓库。

1、阿里云docker管理平台创建仓库

1)进入阿里云镜像服务控制台,新建镜像仓库,如图

Docker总结(配合阿里云容器镜像服务)「建议收藏」

2)新建仓库弹窗,一步一步按提示填,注意,设置代码源可以使用github,阿里云code等等,这里我使用的是阿里云code,后面可以使用项目里面的Dockerfile自动生成镜像,具体步骤下面会详细介绍

Docker总结(配合阿里云容器镜像服务)「建议收藏」

3)新建完之后,会有镜像仓库列表,显示镜像仓库信息

Docker总结(配合阿里云容器镜像服务)「建议收藏」

4)点击管理,基本信息,会有各个命令提示:

登录阿里云docker registry:

  $ sudo docker login --username=  registry.cn-beijing.aliyuncs.com

登录registry的用户名是您的阿里云账号全名,密码是您开通服务时设置的密码。

你可以在镜像管理首页点击右上角按钮修改docker login密码。

从registry中拉取镜像:

  $ sudo docker pull registry.cn-beijing.aliyuncs.com/spencer_docker/django2:[镜像版本号]

将镜像推送到registry:

  $ sudo docker login --username= registry.cn-beijing.aliyuncs.com
  $ sudo docker tag [ImageId] registry.cn-beijing.aliyuncs.com/spencer_docker/django2:[镜像版本号]
  $ sudo docker push registry.cn-beijing.aliyuncs.com/spencer_docker/django2:[镜像版本号]

其中[ImageId],[镜像版本号]请你根据自己的镜像信息进行填写。

2、手动构建Docker镜像

这种方法就是根据docker镜像为基础镜像来创建容器,然后运行容器,在容器中安装自己需要的包,然后再提交(commit)一下,推送(push)到自己的镜像仓库就ok了。

下面以一个Ubuntu:16.04为例,更改为自己的python3.6+django2.0镜像,由于三个版本(v1,v2,v3)都是使用的原始的Ubuntu:16.04,所以三种生成进行镜像方法介绍完之后再以一个版本为例介绍docker环境配置。

1)拉取Ubuntu:16.04官方镜像:

Docker总结(配合阿里云容器镜像服务)「建议收藏」

2)进入镜像,变为容器,随便安装一些包

Docker总结(配合阿里云容器镜像服务)「建议收藏」

3)退出容器,exit,提交镜像(命令可以看本博客命令部分的镜像命令)

Docker总结(配合阿里云容器镜像服务)「建议收藏」

如图,上图提交命令解释:

① -m是对提交的描述,author是作者(选填),后面的c28e5976a6ab是修改容器的id,后面的是新镜像名字和标签(tag)。

② 成功之后,会生成新的镜像id

③ 输入docker images 查看镜像,会发现新的名为spencer/django,标签为v1的镜像已经存在。

4)推送到阿里云docker管理平台,命令参考上面将镜像推送到阿里云registry

Docker总结(配合阿里云容器镜像服务)「建议收藏」

5)打开阿里云镜像服务控制台,进入镜像仓库列表–>管理–>镜像版本,如下图,版本,镜像id,和本地推送上来的版本,镜像id一样

Docker总结(配合阿里云容器镜像服务)「建议收藏」

6)删除本地images,拉取阿里云docker镜像管理台镜像,如下图

Docker总结(配合阿里云容器镜像服务)「建议收藏」

3、利用Dockerfile构建Docker镜像

  由Dockerfile自动构建镜像,其实就是把手动构建的命令逐行写入一个“脚本”里,只不过这个脚本有自己的语法,如下图

wKioL1fkFjbCb5-DAAMG1r9ceFY874.png

1)现在在本地创建一个Dockerfile文件,如图,touch Dickerfile

Docker总结(配合阿里云容器镜像服务)「建议收藏」

2)使用Dockerfile生成镜像,注意:

     ① 如果是手动创建的话,不要创建txt文件,不然本地使用Dockerfile生成docker镜像的是,会报找不到的错误,

     ② 创建命令:docker build -t “repository/images_name:tag” .   

         新建镜像最好在Dockerfile当前路径下面创建,末尾可以用点表示,如果不是在当前路径,需要使用绝对路径

Docker总结(配合阿里云容器镜像服务)「建议收藏」

3)推送到阿里云docker管理平台,如下图

Docker总结(配合阿里云容器镜像服务)「建议收藏」

4、利用阿里云镜像平台的代码源Dockerfile构建docker镜像

   可以将Dockerfile文件放在项目里面,然后利用阿里云镜像平台自动生成镜像功能,生成镜像,生成之后可以直接在本地拉取远程镜像。

  1)可以在阿里云codegithub,等代码管理平台,创建项目,然后将自己的Dockerfile放大项目,推送到远程代码管理平台,然后绑定到阿里云镜像仓库,在创建镜像仓库的时候,设置代码源的选项,设置到Dockerfile文件路径下面就行,具体项目代码不再展示,如下图

Docker总结(配合阿里云容器镜像服务)「建议收藏」

2)进入镜像列表–>管理–>构建–>立即构建,注意:构建设置里面要设置对的Dockefile路径,不然会构建失败。

Docker总结(配合阿里云容器镜像服务)「建议收藏」

Docker总结(配合阿里云容器镜像服务)「建议收藏」

3)构建成功,查看镜像,拉取镜像到本地

点击镜像版本,如图,构建成功

Docker总结(配合阿里云容器镜像服务)「建议收藏」

本地拉取镜像,如图

Docker总结(配合阿里云容器镜像服务)「建议收藏」

注意:建议大家使用dockerfile创建镜像,因为启动镜像,在容器内安装包再commit ,每一次ocmmit都相当于多了一层,这样会导致镜像占用空间比较大而且臃肿,推荐使用dockerfile创建镜像,把多个安装包的步骤放在一个RUN里面,使用&&连接,这样安装多个包相当于在一层中,详细可参考《从入门到实践2》一书,讲解的很到位,下面是百度云盘的链接,有需要的朋友可以拿走。

https://pan.baidu.com/s/1QLsprDiB_fz_r06m_HcKfQ

5、docker环境配置python3.6+django2.0

     其实docker镜像包都是可以通过Dockerfile一次性部署的,我在研究的时候分开了弄,走一遍流程,这样写到dockerfile中保证不会出错。接下来就是我研究过程,博友们不必看,就是简单的安装一些依赖包的过程

    因为我构建的镜像是以ubuntu为基础,ubuntu原始安装命令是apt-get install 

1)更新apt-get install 

     命令:apt-get update

Docker总结(配合阿里云容器镜像服务)「建议收藏」

2)安装Python3.6

说明一下:目前通过 apt-get install python3直接安装的是Python3.5版本,因为python3.6(apt-get install python3.6是无效的)是最新版本,所以只能先安装Python3.5然后升级到3.6。倘若Python3.6全部完善之后出来Python3.7,3.8,3.9等等,这样就可以直接通过apt-get install python3安装3.6了。

①安装Python3 ,安装成功之后,输入python3,会显示Python3.5的交互环境

命令:

apt-get install python3

Docker总结(配合阿里云容器镜像服务)「建议收藏」

②安装Python3.6的需求包

命令:

apt-get install software-properties-common

Docker总结(配合阿里云容器镜像服务)「建议收藏」

③添加Python3.6

命令:

add-apt-repository ppa:jonathonf/python-3.6

Docker总结(配合阿里云容器镜像服务)「建议收藏」

④更新apt-get 

命令:

apt-get update

Docker总结(配合阿里云容器镜像服务)「建议收藏」

安装Python3.6,

命令:

apt-get install python3.6

Docker总结(配合阿里云容器镜像服务)「建议收藏」

⑥安装成功之后输入Python3依旧是Python3.5的交互环境,这样很不方便,接下来就是实现输入Python直接进入到Python3.6的交互环境,如下图:

第一步:which python3 —查看Python3.5安装在何处

第二步:更改软链接,输入Python默认启动Python3.5,命令:ln -s /usr/bin/python3.6 /usr/bin/python

第三步:更改默认启动为Python3.6,注意第三条命令最后的一个2,这个是排序,只要python3.6的排序比3.5的高就行,命令:

           update-alternatives –install /usr/bin/python3 python3 /usr/bin/python3.6 2

Docker总结(配合阿里云容器镜像服务)「建议收藏」

3)安装pip

①安装pip3

命令:

apt-get install python3-pip

Docker总结(配合阿里云容器镜像服务)「建议收藏」

②更新pip3为pip,并升级

命令:

pip3 install --upgrade pip

Docker总结(配合阿里云容器镜像服务)「建议收藏」

4)升级python-dev

起初并不知道这个还需要升级,因为他原本的dev是Python3-dev,但是安装一些包的时候老是报如下错误:

Command "/usr/bin/python3 -u -c "import setuptools, tokenize;__file__='........

找了n久,才发现是这个原因,之前安装原本的dev是Python3-dev,要升级到Python3.6-dev,如下图

命令:

apt-get install python3.6-dev

Docker总结(配合阿里云容器镜像服务)「建议收藏」

5)批量安装依赖包

     把需要安装的依赖放到一个名为requerments的文件中,然后使用命令 pip install -r requerments,批量安装依赖包

命令:

pip install -r requerments

Docker总结(配合阿里云容器镜像服务)「建议收藏」

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/142216.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • docker下载安装教程_docker安装macos

    docker下载安装教程_docker安装macos前言Docker提供轻量的虚拟化,你能够从Docker获得一个额外抽象层,你能够在单台机器上运行多个Docker微容器,而每个微容器里都有一个微服务或独立应用,例如你可以将Tomcat运行在一个D

    2022年7月31日
    3
  • ldap统一用户认证php,Docker搭建OpenLDAP+phpLDAPadmin统一用户认证的方法「建议收藏」

    一、背景使用LDAP对运维相关用户名密码做统一管理。可以实现一个帐号登录多个不同系统。手动部署都是各种问题,后来采用Docker部署,参考了好多教程文档总结如以下内容亲测可用二、部署Docker搭建LDAP#拉取镜像dockerpullosixia/openldap:1.3.0#创建并进入映射目录mkdir-p/usr/local/ldap&&cd/usr/…

    2022年4月11日
    45
  • docker下载安装教程_安卓安装docker

    docker下载安装教程_安卓安装docker前言Docker提供轻量的虚拟化,你能够从Docker获得一个额外抽象层,你能够在单台机器上运行多个Docker微容器,而每个微容器里都有一个微服务或独立应用,例如你可以将Tomcat运行在一个D

    2022年7月29日
    3
  • 【docker安装RabbitMQ详细步骤】

    【docker安装RabbitMQ详细步骤】docker安装RabbitMQ详细步骤1.启动rabbitmqcd/opt/rabbitmqmkdirdata#拉取镜像dockerpullrabbitmq#查看镜像dockerimages#拉取镜像到本地仓库,这里是直接安装最新的,#如果需要安装其他版本在rabbitmq后面跟上版本号即可#dockerpullrabbitmq#启动rabbitMqdockerrun-d\-v/opt/rabbitmq/data:/var/lib/rabbit

    2022年5月23日
    38
  • jenkinsfile docker_dockerfile制作镜像

    jenkinsfile docker_dockerfile制作镜像前言之前我们用docker手动安装了jenkins环境,在jenkins中又安装了python3环境和各种安装包,如果我们想要在其他3台机器上安装,又是重复操作,重复劳动,那会显得很low,这里可以

    2022年7月31日
    30
  • kafka集群搭建-docker版本[通俗易懂]

    kafka集群搭建-docker版本[通俗易懂]提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档kafka集群搭建文章目录kafka集群搭建前言一、kafka是什么?二、集群1.集群2.负载均衡3.扩容4.ZookeeperLeader选举kafka架构集群搭建下载安装zookeeper前言kafka是个高吞吐的消息中间件,为啥快啊?1顺序读写20拷贝3批量提交和批量ACK4分片和副本消息队列高可用就得用集群。提示:以下是本篇文章正文内容,下面案例可供参考一、kafka是什么?kafka理论参

    2022年5月2日
    82

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号