docker基础
Posted shenjianping
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker基础相关的知识,希望对你有一定的参考价值。
一、docker的概念
1、什么是docker?
docker是一种容器,而容器就是将软件打包成标准化单元,以用于开发、交付和部署,所以docker:
- 能够自动执行重复性任务
- 程序运行在虚拟容器里,如同在真实物理机上运行一样
- 将应用程序与程序的依赖,打包在一个文件里面。运行这个文件就会生成一个虚拟容器
2、为什么需要docker?
- 保证环境一致性
- 提高部署速度
- 迁移方便
二、docker操作
1、docker安装
#1、卸载旧的的docker [[email protected] 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源安装库 [[email protected] yum.repos.d]# yum install -y yum-utils \\ > device-mapper-persistent-data > lvm2 [[email protected] yum.repos.d]# yum-config-manager \\ > --add-repo > https://download.docker.com/linux/centos/docker-ce.repo #3、安装docker社区版 [[email protected] ~]# yum install docker-ce #4、启动docker [[email protected] ~]# systemctl start docker #5、查看docker版本 [[email protected] ~]# docker version
查看系统中存在的yum源库:
[[email protected] ~]# cd /etc/yum.repos.d/ [[email protected] 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镜像
[[email protected] ~]# docker search centos
- 下载docker镜像
[[email protected] ~]# docker pull centos
- 查看docker存在的镜像
[[email protected] ~]# docker image ls [[email protected] ~]# docker images
- 运行镜像,产生容器
[[email protected] ~]# docker run centos
- 查看正在运行的容器
[[email protected] ~]# docker ps
- 查看已经挂掉的容器
[[email protected] ~]# 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容器中 [[email protected] ~]# docker run -it centos:7.3.1611 [[email protected] /]# #2、在容器中安装pip工具
#安装setuptools
[[email protected] /]# yum install -y python-setuptools
#安装pip
[[email protected] /]# easy_install pip
#查看版本
[[email protected] /]# pip -V
#3、安装好pip之后,exit退出容器
[[email protected] /]# exit
#4、查看容器记录
[[email protected] ~]# docker ps -a
#5、提交容器创建新的镜像
[[email protected] ~]# docker commit 8f69c9dc428a centos_pip
#6、查看镜像
[[email protected] ~]# 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=“[email protected]" #
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上进行登陆,输入帐户名和密码 [[email protected] ~]# docker login #2、注意要保证image的tag是账户名 格式:语法是: docker tag 镜像名 帐户名/镜像名名 [[email protected] ~]# docker tag centos_pip shenjianping0307/centos_pip #3、推送docker image到docker hub [[email protected] ~]# docker push shenjianping0307/centos_pip:latest #4、登陆自己的账号进行检查,是否推送成功 https://hub.docker.com/ #5、测试将本地的镜像删掉,从docker hub上拉取刚推送上去的镜像 #删除本地镜像 [[email protected] ~]# docker rmi shenjianping0307/centos_pip:latest #查看镜像 [[email protected] ~]# docker images #拉取镜像 [[email protected] ~]# docker pull shenjianping0307/centos_pip:latest #运行交互式镜像 [[email protected] ~]# docker run -it shenjianping0307/centos_pip
三、docker应用
1、dockerfile部署django应用(将django程序作为容器运行)
创建一个django项目docker_test,如下图所示为docker_test的目录结构:
[[email protected] 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
当上述完成后进行镜像生成:
[[email protected] docker_test]# docker build -t shenjianping0307/django_docker . #注意最后面是有一个点的
注意:执行生成镜像命令需要在dokkerfile这一级执行,否则找不到dockerfile文件
此时,可以查看生成的镜像:
[[email protected] docker_test]# docker images
运行镜像生成容器实例:
[[email protected] 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,下次使用直接拉下来就可以使用了,注意先登陆,然后再推送。
[[email protected] /]# docker login #进行登陆
[[email protected] /]# docker push shenjianping0307/django_docker #进行推送
当然,也可以保存到本地:
[[email protected] /]# docker save shenjianping0307/django_docker > /temp/django_docker.tar.gz #导出镜像到本地
如果需要使用,在将其导入到镜像库:
#使用docker load从本地文件中导入到本地docker镜像库 [[email protected] temp]# docker load < django_docker.tar.gz #导入本地镜像到docker镜像库
2、利用docker容器搭建环境进行部署应用
- 获取基础的系统镜像centos
[[email protected] ~]# docker pull centos:7.3.1161
- 进入交互式的容器中
docker run -it centos:7.3.1611
- 安装python
#安装必要工具 yum-utils 管理repository及扩展包的工具 [[email protected] /]# yum install yum-utils -y #安装缺失的软件依赖,使用下面的命令会自动处理 [[email protected] /]# yum-builddep python -y #安装wget [[email protected] /]# yum install wget -y #获取python包 [[email protected] /]# wget https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz #解压到指定目录 [[email protected] /]# tar xvf Python-3.5.2.tgz -C /usr/local/ #在/usr/local下建立目录Python3 [[email protected] local]# mkdir Python3 #切换到已经解压的目录,配置安装目录、编译源码、执行源码安装 [[email protected] Python-3.5.2]# ./configure --prefix=/usr/local/Python3 #配置安装目录 [[email protected] Python-3.5.2]# make #编译 #注意在make时如果出现bash: make: command not found错误,执行 yum -y install gcc automake autoconf libtool make yum install gcc gcc-c++ [[email protected] Python-3.5.2]# make install#执行源码安装 #创建python3.5.2软连接 [[email protected] bin]# ln -s /usr/local/Python3/bin/python3 /usr/bin/python3
- 对pip升级
安装python时自带了pip但是版本较低,进行升级。
#创建pip软连接 [[email protected] bin]# ln -s /usr/local/Python3/bin/pip3 /usr/bin/pip3 #对pip升级 [[email protected] bin]# pip3 install -U pip #查看版本 [[email protected] bin]# pip3 -V
- 生成开发环境镜像
这个就是一个包含python3.5.2以及最新版本的pip的容器,现在给它生成一个镜像,以后开发环境就用它。
#退出容器 [[email protected] /]# exit #查看容器记录 [[email protected] temp2]# docker ps -a #生成镜像 [[email protected] temp2]# docker commit 48a90994f9b7 centos-with-python3
- 运行django项目
现在使用这个镜像来运行django项目
#交互式进入镜像 [[email protected] ~]# docker run -it centos-with-python3 #安装django模块 [[email protected] /]# pip3 install django==2.0 #新建一个目录用于存放django项目 [[email protected] /]# makedir webapps #进入目录创建项目 [[email protected] 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
#生成项目的镜像
[[email protected] ~]# docker commit 17c5ac5c5ebe django_test
#运行项目镜像,主要进行端口映射,这里事先规定好了django的端口8080
[[email protected] ~]# docker run --name django_demo -itd -p 8900:8080 -v /webapps/mysite django_test:latest
#注意:--name 是生成容器的名字;-itd 输入输出终端,后台运行;-p host端口 端口映射;-v host路径 容器内路径(这里其实写什么目录没有什么影响,/webapps也是可行的,
主要看容器内的操作);最后是使用的镜像名
#进入容器内部,启动django程序
[[email protected] ~]# docker attach django_demo
[[email protected] /]# cd webapps/mysite/
[[email protected] mysite]# ls
db.sqlite3 manage.py mysite
[[email protected] mysite]# python3 manage.py runserver 0.0.0.0:8080 #启动
Performing system checks...
- 访问django项目
以上是关于docker基础的主要内容,如果未能解决你的问题,请参考以下文章