码迷,mamicode.com
首页 > 其他好文 > 详细

docker基础

时间:2019-07-05 19:23:13      阅读:95      评论:0      收藏:0      [点我收藏+]

标签:direct   启动   views   缓存   内容   require   改变   ice   并且   

一、docker的概念

1、什么是docker?

docker是一种容器,而容器就是将软件打包成标准化单元,以用于开发、交付和部署,所以docker:

  • 能够自动执行重复性任务
  • 程序运行在虚拟容器里,如同在真实物理机上运行一样
  • 将应用程序与程序的依赖,打包在一个文件里面。运行这个文件就会生成一个虚拟容器

2、为什么需要docker?

  • 保证环境一致性
  • 提高部署速度
  • 迁移方便

二、docker操作

1、docker安装

#1、卸载旧的的docker
[root@bogon yum.repos.d]# yum remove docker \
>                   docker-client >                   docker-client-latest >                   docker-common >                   docker-latest >                   docker-latest-logrotate >                   docker-logrotate >                   docker-selinux >                   docker-engine-selinux >                   docker-engine

#2、建立yum源安装库
[root@bogon yum.repos.d]#  yum install -y yum-utils \
>   device-mapper-persistent-data >   lvm2

[root@bogon yum.repos.d]# yum-config-manager \
>     --add-repo >     https://download.docker.com/linux/centos/docker-ce.repo

#3、安装docker社区版
[root@bogon ~]# yum install docker-ce

#4、启动docker
[root@bogon ~]# systemctl start docker

#5、查看docker版本
[root@bogon ~]# docker version

查看系统中存在的yum源库:

[root@bogon ~]# cd /etc/yum.repos.d/
[root@bogon yum.repos.d]# ls
CentOS-Base.repo       CentOS-fasttrack.repo  CentOS-Vault.repo  local.repo
CentOS-CR.repo         CentOS-Media.repo      epel.repo
CentOS-Debuginfo.repo  CentOS-Sources.repo    epel-testing.repo

2、docker命令的使用

  • 获取docker镜像
[root@bogon ~]# docker search centos
  • 下载docker镜像
[root@bogon ~]# docker pull centos
  • 查看docker存在的镜像
[root@bogon ~]# docker image ls
[root@bogon ~]# docker images
  • 运行镜像,产生容器
[root@bogon ~]# docker run centos
  • 查看正在运行的容器
[root@bogon ~]# docker ps
  • 查看已经挂掉的容器
[root@bogon ~]# docker ps -a
  • 删除镜像文件
#如果镜像产生的容器还有记录的话,先删掉容器,再删对应的镜像
    #1、删除容器记录
        docker rm  容器id
    #2、删除镜像
        docker  rmi 镜像名(镜像id)
    #3、批量删除容器记录
    docker rm `docker ps -aq` 
  • 交互式运行容器
docker run -it --rm centos bash 
    docker run 就是运行容器的命令。
    #参数
     -it :-i 是交互式操作,-t是终端
     -rm:容器退出后将其删除,也可以不指定参数,手动docker rm,使用-rm可以避免浪费空间。
     centos :镜像文件
     bash:指定用交互式的shell,因此需要bash命令

 3、构建自定义镜像文件

  自己下载的镜像文件是没有一些工具的,如何将下载的镜像文件假如一些工具,下次可以接着使用呢?比如在centos容器中安装pip,然后将这个容器做成镜像,以后就使用pip镜像可以用这个,是不是相对方便一些呢?

#1、进入交互式的centos容器中
[root@bogon ~]# docker run -it centos:7.3.1611 
[root@43dab434ca37 /]# 

#2、在容器中安装pip工具

    #安装setuptools
    [root@43dab434ca37 /]# yum install -y python-setuptools

    #安装pip
    [root@43dab434ca37 /]# easy_install pip

    #查看版本
    [root@43dab434ca37 /]# pip -V

 #3、安装好pip之后,exit退出容器

 [root@43dab434ca37 /]# exit

 #4、查看容器记录

 [root@bogon ~]# docker ps -a

 #5、提交容器创建新的镜像

  [root@bogon ~]# docker commit 8f69c9dc428a centos_pip

  #6、查看镜像

  [root@bogon ~]# docker images

4、Dockerfile自定制镜像

  之前使用的镜像是从docker hub上获取的然后进行改造的镜像,但是有些需求是无法满足的,此时可以通过Dockerfile来进行定制,docker 可以从Dockerfile中读取指令并自动构建镜像。Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令 构建一层,因此每一条指令的内容,就是描述该层应当如何构建。

dockerfile 参数解释

Dockerfile  

FROM centos #base image,如果有指定版本的base image使用 FROM centos:7.3.1161 

LABEL maintainer=“xxx@xx.com" #
LABEL version="1.0" 
LABEL description="This is description!  #关于image的注释信息
#对于复杂的RUN命令,避免无用的分层,多条命令用反斜线换行,合成一条命令!
RUN yum update && yum install -y vim     Python-dev #反斜线换行    
RUN   yum install python-setuptools -y 

WORKDIR /root #相当于linux的cd命令,改变目录
WORKDIR /test #如果没有就自动创建
WORKDIR demo #再进入demo文件夹RUN pwd  #打印结果应该是  /test/demo   尽量使用绝对路径

EXPOSE 8000 #暴露容器内部的端口号,以及宿主机的使用

CMD ["python","app.py"] #容器启动后默认执行的命令和参数

#把宿主机内的文件,添加到容器内 #添加文件到容器内,并且还有解压缩的功能 ADD and COPY ADD hello / #把本地文件添加到镜像中,本地的hello可执行文件拷贝到镜像的/目录 ADD test.tar.gz / #添加到根目录并解压 WORKDIR /root ADD hello test/ #进入/root/ 添加hello可执行命令到test目录下,也就是/root/test/hello 一个绝对路径 COPY hello test/ #等同于上述ADD效果 ADD与COPY - 优先使用COPY命令 -ADD除了COPY功能还有解压功能 添加远程文件/目录使用curl或wget ENV 变量名 变量值 #格式 ENV MYSQL_VERSION 5.6 #设置一个mysql常量 RUN yum install -y mysql-server=“${MYSQL_VERSION}”  

5、docker hub的使用

上述已经创建自定义的镜像,如何将镜像上传到docker hub以便以后可以拉下来直接使用呢?

#1、在linux上进行登陆,输入帐户名和密码
[root@bogon ~]# docker login

#2、注意要保证image的tag是账户名
格式:语法是:  docker tag   镜像名   帐户名/镜像名名

[root@bogon ~]# docker tag centos_pip shenjianping0307/centos_pip

#3、推送docker image到docker hub
[root@bogon ~]# docker push shenjianping0307/centos_pip:latest

#4、登陆自己的账号进行检查,是否推送成功
https://hub.docker.com/

#5、测试将本地的镜像删掉,从docker hub上拉取刚推送上去的镜像
    #删除本地镜像
    [root@bogon ~]# docker rmi shenjianping0307/centos_pip:latest 
    #查看镜像
    [root@bogon ~]# docker images
    #拉取镜像
    [root@bogon ~]# docker pull shenjianping0307/centos_pip:latest
    #运行交互式镜像    
    [root@bogon ~]# docker run -it shenjianping0307/centos_pip
   

 三、docker应用

1、dockerfile部署django应用(将django程序作为容器运行)

创建一个django项目docker_test,如下图所示为docker_test的目录结构:

[root@bogon docker_test]# tree
.
├── app01
│   ├── admin.py
│   ├── apps.py
│   ├── __init__.py
│   ├── migrations
│   │   └── __init__.py
│   ├── models.py
│   ├── tests.py
│   └── views.py
├── dockerfile
├── docker_test
│   ├── __init__.py
│   ├── __pycache__
│   │   ├── __init__.cpython-35.pyc
│   │   └── settings.cpython-35.pyc
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── manage.py
├── requirements.txt
└── templates

5 directories, 16 files

可以看到,知识在django的manage.py文件的同级,添加了dockerfile以及requirements.txt文件,dockerfile文件的内容为:

FROM python:3.5.2 #base image

LABEL author="bright"  #作者信息

ENV PYTHONUNBUFFERED 1 #输出不缓存

RUN mkdir /webapps   #创建目录

COPY requirements.txt  /webapps

WORKDIR /webapps

RUN pip install -r /webapps/requirements.txt

ADD . /webapps/

CMD [ "python", "./manage.py", "runserver", "0.0.0.0:8080"]

requirements.txt文件为需要安装的包:

django==2.0

当上述完成后进行镜像生成:

[root@bogon docker_test]# docker build -t shenjianping0307/django_docker . #注意最后面是有一个点的

注意:执行生成镜像命令需要在dokkerfile这一级执行,否则找不到dockerfile文件

此时,可以查看生成的镜像:

[root@bogon docker_test]# docker images

运行镜像生成容器实例:

[root@bogon docker_test]# docker run -it --rm -p 8000:8080 --name django_test shenjianping0307/django_docker

注意:8000:8080表示宿主机的端口号映射到容器内的端口号

进行访问8000端口:

技术图片

注意:项目中settings文件中

ALLOWED_HOSTS = [] #修改为  ALLOWED_HOSTS = ["*"]否则报错

这样项目的镜像做好后可以直接推送到docker hub,下次使用直接拉下来就可以使用了,注意先登陆,然后再推送。

[root@bogon /]# docker login  #进行登陆

  [root@bogon /]# docker push shenjianping0307/django_docker #进行推送

当然,也可以保存到本地:

[root@bogon /]# docker save shenjianping0307/django_docker > /temp/django_docker.tar.gz    #导出镜像到本地

如果需要使用,在将其导入到镜像库:

#使用docker load从本地文件中导入到本地docker镜像库

[root@bogon temp]# docker load < django_docker.tar.gz #导入本地镜像到docker镜像库

2、利用docker容器搭建环境进行部署应用

  • 获取基础的系统镜像centos
[root@bogon ~]# docker pull centos:7.3.1161
  • 进入交互式的容器中
docker run -it centos:7.3.1611 
  • 安装python
#安装必要工具 yum-utils 管理repository及扩展包的工具
[root@48a90994f9b7 /]# yum install yum-utils -y

#安装缺失的软件依赖,使用下面的命令会自动处理
[root@48a90994f9b7 /]# yum-builddep python -y

#安装wget
[root@48a90994f9b7 /]# yum install wget -y

#获取python包
[root@48a90994f9b7 /]# wget  https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz

#解压到指定目录
[root@48a90994f9b7 /]# tar xvf Python-3.5.2.tgz -C /usr/local/

#在/usr/local下建立目录Python3
[root@48a90994f9b7 local]# mkdir Python3

#切换到已经解压的目录,配置安装目录、编译源码、执行源码安装
[root@48a90994f9b7 Python-3.5.2]# ./configure --prefix=/usr/local/Python3 #配置安装目录

[root@48a90994f9b7 Python-3.5.2]# make #编译
#注意在make时如果出现bash: make: command not found错误,执行
yum -y install gcc automake autoconf libtool make
yum install gcc gcc-c++

[root@48a90994f9b7 Python-3.5.2]# make install#执行源码安装

#创建python3.5.2软连接
[root@48a90994f9b7 bin]# ln -s /usr/local/Python3/bin/python3  /usr/bin/python3
  • 对pip升级

安装python时自带了pip但是版本较低,进行升级。

#创建pip软连接
[root@48a90994f9b7 bin]# ln -s /usr/local/Python3/bin/pip3  /usr/bin/pip3 

#对pip升级
[root@48a90994f9b7 bin]# pip3 install -U pip

#查看版本
[root@48a90994f9b7 bin]# pip3 -V
  • 生成开发环境镜像

这个就是一个包含python3.5.2以及最新版本的pip的容器,现在给它生成一个镜像,以后开发环境就用它。

#退出容器
[root@48a90994f9b7 /]# exit
#查看容器记录
[root@bogon temp2]# docker ps -a
#生成镜像
[root@bogon temp2]# docker commit 48a90994f9b7 centos-with-python3
  • 运行django项目

现在使用这个镜像来运行django项目

#交互式进入镜像
[root@bogon ~]# docker run -it centos-with-python3

#安装django模块
[root@17c5ac5c5ebe /]# pip3 install django==2.0

#新建一个目录用于存放django项目
[root@17c5ac5c5ebe /]# makedir webapps

#进入目录创建项目
[root@17c5ac5c5ebe webapps]# python3 /usr/local/Python3/lib/python3.5/site-packages/django/bin/django-admin.py startproject mysite
#注意:django-admin.py如果软连接会出错ImportError: No module named django.core

#生成项目的镜像
[root@bogon ~]# docker commit 17c5ac5c5ebe django_test

#运行项目镜像,主要进行端口映射,这里事先规定好了django的端口8080
[root@bogon ~]# docker run --name django_demo -itd -p 8900:8080 -v /webapps/mysite django_test:latest
#注意:--name 是生成容器的名字;-itd 输入输出终端,后台运行;-p host端口 端口映射;-v  host路径 容器内路径(这里其实写什么目录没有什么影响,/webapps也是可行的,
主要看容器内的操作);最后是使用的镜像名

#进入容器内部,启动django程序
[root@bogon ~]# docker attach django_demo 

 [root@ee8ce815f137 /]# cd webapps/mysite/
 [root@ee8ce815f137 mysite]# ls
 db.sqlite3 manage.py mysite

 [root@ee8ce815f137 mysite]# python3 manage.py runserver 0.0.0.0:8080 #启动
 Performing system checks...

  • 访问django项目

技术图片

 

docker基础

标签:direct   启动   views   缓存   内容   require   改变   ice   并且   

原文地址:https://www.cnblogs.com/shenjianping/p/11126957.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!