什么是docker?
# docker
docker 是一构建容器的工具
# docker容器
通过内核虚拟化技术来提供容器的资源隔离和资源限制。所以docker容器在运行的时候,不要类似虚拟机额外的操作系统开销,从而比kvm虚拟机更轻量
# 注意
docker容器与容器之间是相互隔离的
# 安装docker
# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3: 更新并安装Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
# Step 4: 开启Docker服务
sudo service docker start # systemctl start docker
docker命令
# 刷新一下新增的yum源
yum makecache
# 更新系统除了内核
内核 yum update –y --exclude=kernel*
# 临时修改开机启动docker
systemctl enable docker
# 查看docker内部信息
docker info
# docker 启动nginx
docker run –d --name nginx –p 80:80 nginx # -d 后台运行 最后的nginx 起什么镜像 --name 指定的是该rongqi的名字
docker起nginx , linux起nginx的差别
docker默认配置的镜像站是国外
# 配置自己的镜像站
vim /etc/docker/daemon.json # 默认是没有该文件的
# 添加内容
{
"registry-mirrors":["https://registry.docker-cn.com"]
}
# 重启docker服务
systemctl restart docker
dock run 参数解释
学习docker的增删改查命令
# 增
1.从dockerhub 仓库中获取docker镜像,从github获取代码一样
docker pull centos # 去docker仓库中寻找centos系统镜像
docker pull ubantu # 获取乌班图镜像
# 删
1.删除本地镜像文件
docker rmi 镜像id(前三位即可) # rmi remove images
2.删除容器记录的名字的命令
docker rm 容器ID(前三位)
3.退出容器
exit
4.批量清空无用的docker容器记录,容器记录非常容易创建 docker run
docker rm `docker ps -aq` # 删除正在执行的容器
5.批量删除镜像
docker rmi `docker images` # 批量删除镜像
6.停止容器的运行
docker stop 容器的id
7.重启容器
docker restart 容器的id
# 改
1.运行第一个docker的容器实例,运行镜像文件,产生容器进程
docker run 镜像名字即可 # 如果docker容器中没有运行的进程,容器会直接挂掉
2.运行一个hello world 进程
-docker pull hello-world # 从docker镜像站拉去一个hello-word镜像
-docker run hello-workd # 运行该镜像
3.交互式的运行一个存活的docker容器 # centos
docker run -it centos /bin/bash # -it参数 -i 是交互式命令操作 -t开启一个终端 /bin/bash 指定shell解释器
# 运行一个centos镜像,并且进入该容器
4.运行一个活着的容器 # -d 后台运行 -c 执行shell语句
docker run -d centos /bin/bash -c "while true;do echo hello centos; sleep 1;done"
5.运行docker容器,且指定名字,便于管理
docker run --name "nginx" -d -p 81:81 nginx # --name 必须写在 run后面,指的是该容器的别名
6.进入一个正在运行的容器
docker exec -it 容器id(容器别名) /bin/bash # exec 进入容器
7. 如何进入容器空间内,修改容器内的环境,以及代码等内容,修改软件等操作,且提交镜像等,发送给其他人
1.进入容器内部,安装一个vim或者是python3等步骤
docker run -it centos /bin/bash
yum install wget -y
2.安装好之后,退出容器
exit
3.提交该容器,生成新的镜像文件
docker commit 容器id hpy/centos-vim # 提交容器id,生成镜像
8.导出你的docker环境,发送给同事
docker save 镜像id > 镜像的压缩文件.tar.gz # docker save 5d94713f6dfc > ./wget.tar.gz # 压缩文件
9.如何进行镜像导入
docker load < 镜像压缩文件.tar.gz
# 首次导入的时候,没有显示仓库名,标签名字,重新赋予一个即可
docker tag 镜像ID 标签名字
10如何在容器内,运行一个python的web程序,需要 用到端口映射知识
docker run -d -P training/webapp python app.py
# -d 后台运行
# -P 大写的P参数,作用是随机的端口映射
# training/webapp 是镜像的名字,默认没有会去自己配的仓库下载
# python app.py 代表启动容器后,让容器执行的命令是它
# 注意 宿主机和docker容器的端口映射
-P # 大P是随机映射端口
-p 300:3000 # 小p 是指定 宿主机的300端口,映射到容器的3000端口
# 查
1.查看本地机器,所有的镜像文件内容
docker images
2.查看docker 正在运行的进程
docker ps # 查看docker容器中 正在运行的进程
docker ps -a # 查看docker容器中,所有运行过的进程,包括挂掉的进程
3.查看容器内的运行日志
docker logs 容器id # 查看容器内的日志
docker logs -f 容器id # 实时刷新容器内的日志,例如监控nginx的日志信息
4.收索镜像
docker search flask # 从配置的docker网站收缩是否有该镜像
5.查看当前运行的容器id
docker ps -aq
6.查看容器端口
docker port 容器id
curl
模拟发送http请求
curl ip:port
yaml配置文件
# 你用过哪些格式的配置文件?
JSON
conf # nginx.conf
ini # uwsgi.ini
xml # java
yaml # 新式的配置文件,遵循pyhton的缩进语法
# 语法规则
大小写敏感
使用缩进表示层级关系
缩进时禁止使用tab键,只能空格
缩进的空格数量不重要,只要相同层级的元素左侧对齐即可
# 表示注释行
# yaml支持的数据结构
对象:键值对,也称为映射mapping 哈希hashes 字典dict # 冒号表示 key : value key冒号必须要有
数组:一组按次序排列的值,又称为序列sqquence 列表list # 短横线 - list1
纯量: 单个不可再分的值
# 对象 : 键值对
python字典套字典 {'info':['name':'sun','age':18]}
yaml的配置文件写法
"s25":
"男同学":
-"sun"
-"qwx"
"女同学":
-"howard"
-"迪丽热巴"
后端开发人员
只需要掌握docker的容器,镜像,仓库的增删改查即可
dockerfile
# dockerfie
由于拉取的镜像不能作为正常使用,所以要私人定制
dockerfile 指令
# FROM 指令
FROM scratch # 制作base image基础镜像,尽量使用官方的image作为base image
FROM centos
FROM ubuntu:14.04 # 带有tag的base image
# LABEL标签,定义变量,定义作者信息
LABEL version="1.0" # 容器元信息,帮助信息,Metadata,类似于代码注释
LABEL maintainer="huangpengyang@163.com"
# RUN是一个万能指令,你可以在docker中执行任意指令
# RUN 就是告诉容器要做哪些配置
RUN mkdir /sun
RUN cd /sun
RUN pwd
# WORKDIR # 相当于linux中的cd命令,尽量使用绝对路径,!!!尽量不要使用 RUN cd
WORKDIR /sun # 如果没有就自动创建
# ADD指令用于添加宿主机的文件,拷贝到容器空间内
# 宿主机有自己的文件系统,文件夹,文件,目录等
# 容器内也有一套自己的文件系统,独立的文件信息
# 把宿主机的代码,拷贝到容器内
# ADD 还有解压缩的功能
ADD and COPY
ADD hello.txt / # 把宿主机的hello.txt 拷贝到容器内 /目录下
ADD test.tar.gz / # 添加到根目录并解压
# COPY # 是拷贝文件其实跟 ADD一样
ADD与COPY:
-优先使用COPY命令
-ADD除了COPY功能还有解压功能
# ENV # 环境变量,尽可能使用ENV增加可维护性
ENV MYSQL_VERSION 5.6 # 设置一个mysql的常量 # 这里不需要使用=号
RUN yum install -y mysql-server=MYSQL_VERSION
# 如何编写dockerfile
构建镜像的步骤
1.准备一个flask代码,检查需要哪些依赖步骤
vim flask_run.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return 'hello'
if __name__ =="__main__":
app.run(host="0.0.0.0",port=8080)
2.安装flask模块,在宿主机试试能否执行上面的代码
pip install flask
python flask_run.py
3.编辑dockerfile脚本,注意名字必须是大写的 Dockerfile
touch Dockerfile # 创建文件
vim Dockerfile # 编写文件
FROM python # 指定dockerhub提供好的python镜像,已经安装好了python3,很好用
RUN pip3 install -i https://pypi.douban.com/simple flask # 在容器内安装flask模块
ADD flask_run.py /opt # 把宿主机的代码拷贝到容器
WORKDIR /opt # 目录切换
EXPOSE 8080 # 指定容器端口
CMD ["python3","flask_run.py"] # 容器执行的命令 # RUN python flask_run.py
3.5 检查准备好的代码,以及dockerfile文件
4.构建dockerfile,生成镜像
docker build .
5.检查docker的镜像是否生成 # 默认创建出来的镜像灭有名字的
6.给新镜像添加名字
docker tag 容器id 名字
7.运行该镜像文件
docker run -d -p 8000:8080 容器id
dockerhub的使用
操作