1.docker的三大概念
镜像 ,理解为系统盘dvd镜像 ,轻量级的镜像文件 class
把运行路飞学诚的应用程序,打包成一个docker镜像
仓库,存储docker镜像的
容器 ,是基于镜像运行出的,容器实例
2.安装及配置
1.安装docker,由于网速问题,选择阿里云的yum源下载
yum install docker -y
2.启动docker
systemctl start docker
3.docker加速器,加速下载
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
会生成一个docker配置文件,路径是/etc/docker/daemon.json
4.配置了加速器,需要重启docker
systemctl restart docker
出现报错 : 打开 /etc/docker/daemon.json 去掉结尾的逗号
3.基本命令的学习
增
#下载docker镜像
docker pull hello-world
#运行docker镜像,产生容器实例
#运行docker镜像,ubuntu系统
docker run ubuntu
#交互式的运行ubuntu 容器,进入容器空间内
docker run -it ubuntu /bin/bash
#参数解释
-i 交互式的命令操作
-t 开启一个终端提供访问
/bin/bash 指定shell解释器
#打包构建一个携带vim的centos镜像文件
1.先运行一个centos基础镜像
docker run -it centos /bin/bash
2.在容器空间内,安装vim
yum install vim -y
3.退出容器空间,提交这个容器,为新的镜像
退出:exit
docker commit 1d5698b91178 yuchao163/s17centos-vim
docker run -it --rm 94e /bin/bash
--rm 运行容器,退出后,删除容器记录
#给容器记录命名
docker run --name myredis 94e /bin/bash
#后台不间断运行一个 shell语句
docker run -d centos /bin/sh -c "while true;do echo 好嗨哦,感觉人生到达了巅峰; sleep 1;done"
-d 后台运行
centos 指定镜像文件
/bin/sh 指定shell解释器
-C 指定一个shell语句
#导出本地的镜像文件
docker save 0fc9d49cb739 > /opt/s17centos.tar.gz
#导入镜像文件,
docker load < /opt/s17centos.tar.gz
删
#删除容器记录
docker rm 容器id
#批量删除容器记录
docker rm `docker ps -aq`
#强制删除所有容器记录
docker rm -f `docker ps -aq`
#删除镜像记录
docker rmi 镜像id
#批量删除镜像文件
docker rmi `docker images -aq`
改
#修改docker镜像名,tag标记名
docker tag 镜像id 新的标记名
查
#运行过docker镜像后,会产生容器记录
#差看docker镜像的命令
docker image ls
docker images #等同于上述命令,查看镜像
#查看正在运行的容器进程,
docker container ls
docker ps
#docker ps只能查看正在运行的容器
docker ps -a 查看所有的容器记录
#docker容器,必须有后台程序在运行,否则容器就退出
#查询docker镜像记录
docker search centos
#查看容器空间内的日志
docker logs 容器id
docker logs -f 容器id #不间断打印容器内日志信息
#进入正在运行的容器空间
docker exec -it 容器id /bin/bash
#启停docker容器
docker start 容器id
docker stop 容器id
docker端口映射
docker run -d -p 4567:5000 training/webapp #指定宿主机的4567端口,映射到容器的5000端口
-d 后台运行容器
-p 指定映射端口
#进入到这个容器空间
docker exec -it 616(容器id) /bin/bash
Dockerfile
#指定一个基础镜像
FROM scratch #制作base image 基础镜像,尽量使用官方的image作为base image
FROM centos #使用base image
FROM ubuntu:14.04 #带有tag的base image
LABEL version=“1.0” #容器元信息,帮助信息,Metadata,类似于代码注释
LABEL maintainer=“yc_uuu@163.com"
#对于复杂的RUN命令,避免无用的分层,多条命令用反斜线换行,合成一条命令!
RUN yum update && yum install -y vim
Python-dev #反斜线换行
RUN /bin/bash -c "source $HOME/.bashrc;echo $HOME”
#run指令是一个万能指令
WORKDIR /root #相当于linux的cd命令,改变目录,尽量使用绝对路径!!!不要用RUN cd
WORKDIR /test #如果没有就自动创建
WORKDIR demo #再进入demo文件夹
#ADD是添加文件,从物理机本地,添加到容器空间内
ADD and COPY
ADD hello / #把本地文件添加到镜像中,吧本地的hello可执行文件拷贝到镜像的/目录
ADD test.tar.gz /tmp #添加到根目录并解压
#并且ADD指令还有 解压缩的功能
WORKDIR /root
ADD hello test/ #进入/root/ 添加hello可执行命令到test目录下,也就是/root/test/hello 一个绝对路径
COPY hello test/ #等同于上述ADD效果
ADD与COPY
- 优先使用COPY命令
-ADD除了COPY功能还有解压功能
添加远程文件/目录使用curl或wget
#环境变量,ENV 尽可能使用ENV增加可维护性
ENV MYSQL_VERSION 5.6 #设置一个mysql常量
ENV MYSQL_VERSION 6.7
RUN yum install -y mysql-server=“${MYSQL_VERSION}”
RUN yum install -y mysql-server=“${MYSQL_VERSION}”
RUN yum install -y mysql-server=“${MYSQL_VERSION}”
打包flask程序与dockerfile
1.准备一个flask代码文件
[root@master mydocker]# cat my-flask.py
#coding:utf8
from flask import Flask
app=Flask(__name__)
@app.route('/')
def hello():
return " Me 宇宙无敌"
if __name__=="__main__":
app.run(host='0.0.0.0',port=8080)
2.准备构建dockerfile,用于生成镜像(touch Dockerfile)(必须是大写D)
FROM centos #指定一个基础镜像
COPY CentOS-Base.repo /etc/yum.repos.d/ #拷贝本地的yum仓库,到容器空间内
COPY epel.repo /etc/yum.repos.d/ #
RUN yum clean all
RUN yum install python-setuptools -y
RUN easy_install flask
COPY s17-flask.py /opt/
WORKDIR /opt
EXPOSE 8080 #暴露容器的8080端口,供给物理机去映射访问
CMD ["python","s17-flask.py"] #cmd代表执行命令
3.准备 CentOS-Base.repo epel.repo
4.确保 dockerfiel,flask代码,yum仓库文件,在同一层目录
5.构建镜像
docker build .
6.检查docker镜像文件,是否有自己创建的镜像
7.修改镜像的名字
docket tag 镜像名 新的镜像名
8.运行镜像,生成容器实例
docker run -p 8080:8080 -d 04b
9.检查docker端口映射状态
docker port 容器id
10.访问windows,找到容器内的应用