Docker学习
Docker 是什么
Docker 是一个应用打包、分发、部署的工具
打包:就是把你软件运行所需的依赖、第三方库、软件打包到一起,变成一个安装包
分发:你可以把你打包好的“安装包”上传到一个镜像仓库,其他人可以非常方便的获取和安装
部署:拿着“安装包”就可以一个命令运行起来你的应用,自动模拟出一摸一样的运行环境,不管是在Windows/Mac/Linux。
安装Docker
1.安装gcc相关
yum -y install gcc
yum -y install gcc-c++
2.查看docker是否安装
yum list installed | grep docker
3.卸载之前的版本
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
4.安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
5.设置阿里云镜像源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
6.更新yum软件包索引
yum makecache fast
7.安装docker-ce
yum -y install docker-ce
启动Docker
systemctl start Docker
Docker帮助命令
docker 命令 --help 万能命令
Docker镜像命令
docker images 查看所有镜像
docker serach xxx 搜索镜像
docker pull xxx 下载最新版本镜像(docker pull xxx:版本号)
docker rmi xxx 删除镜像
Docker容器命令
新建容器并启动:
docker run [可选参数] image
参数:
--name="xx" 容器名字
-d 后台运行
-it 使用交互方式运行,进入容器查看内容
-p 指定ip
-p 主机端口:容器端口(常用)
-p 容器端口
退出容器:
exit
快捷键Ctrl+p+q
查看所有在运行的容器:
docker ps
参数:
-a 历史运行容器
-n 最近运行容器
-q 只显示容器编号
删除容器
docker rm xxx
启动容器
docker start xxx
停止容器
docker stop xxx
重启容器
docker restart xxx
强制停止容器
docker kill xxx
Docker打包自己的镜像
提交容器成为新的副本
1、启动容器
2、修改容器内容
3、打包镜像
docker commit -a="作者" -m="提交信息" 要打包的容器id 打包后的名字:TAG
Docker容器数据卷
将容器内的目录挂载到容器外
方式一:直接使用命令来挂载 -v
docker run -it -v 主机目录:容器目录:权限(ro只读,rw可读写) 容器id /bin/bash
挂载成功之后,目录共享,容器被删除共享出来的目录也不会删除,一旦这个了设置了容器权限,容器对我们挂载出来的内容就有限定了!
ro:只要看到ro就说明这个路径只能通过宿主机来操作,容器内部是无法操作!
数据容器
多个容器同步数据(Mysql为例),挂载的一方为父容器(数据卷容器)
docker run -it --name 容器名 --volumes-from 绑定的容器id 镜像id
只要容器没有全部删除,那么文件就不会丢失
DockerFile
Dockerfile就是用来构建docker镜像的构建文件!命令脚本
通过这个脚本可以生成镜像,镜像是一层一层的,脚本一个个的命令,每个命令都是一层!
# 创建dockerfile文件,内容如下:
# 内容:指令(大写) 参数
FORM centos
VOLUME ["volume01","volume02"] # 默认挂载到外部的卷(匿名挂载),使用docker inspect 容器id查看 Mounts
CMD echo "-----end-----"
CMD /bin/bash
生成镜像
docker build -f 脚本文件 -t 镜像名(只能小写):版本 .
基础知识:
1、每个保留关键字(指令)都是必须是大写字母
2、执行从.上到下顺序执行
3、#表示注释
4、每一个指令都会创建提交一个新的镜像层,并提交!
DockerFile指令
FROM #基础镜镜像,一切从这里开始构建
MAINTAINER #镜像是谁写的,姓名+邮箱
RUN #镜像构建的时候需要运行的命令
ADD #步骤,tomcat镜像, 这个tomcat压缩包!添加内容
WORKDIR #镜像的工作目录
VOLUME #挂载的目录
EXPOSE #暴露端口配置
CMD #指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT #指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD #当构建一个被继承DockerFile 这个时候就会运行ONBUILD的指令。触发指令。
COPY #类似ADD,将我们文件拷贝到镜像中
ENV #构建的时候设置环境变量!
CMM 和 ENTRYPOINT
CMD:
FROM centos:7
CMD ["ls","-a"]
#当我们想追加一个命令
docker run 容器id -l
报错:
docker: Error response from daemon: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "-l": executable file not found in $PATH: unknown.
#CMD 的情况下-1 替换了CMD ["1s","-a"] 命令,-1不是命令所以报错!
ENTRYPOINT:
#当我们想追加一个命令
docker run ccd4457238d1 -l
#ENTRYPOINT 是直接拼接在ENTRYPOINT[]命令后面的!
测试
Docker Hub中99%的镜像都是从FROM scratch开始的,然后配置需要的软件和配置来进行的构建
FROM centos:7
MAINTAINER susunxi<2048studio.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum install vim
EXPOSE 55555
CMD echo $MYPATH
CMD echo "--success--"
CMD /bin/bash
其它命令
查看日志
docker logs xxx
查看容器内部的进程信息
docker top xxx
查看镜像元数据
docker inspect xxx
进入当前正在运行的容器
docker exec -it xxx /bin/bash (进入容器开启新的终端)
docker attach -it xxx (进入正在执行的终端)
从容器中拷贝文件到主机
docker cp xxx:容器内路径 目的主机的路径
示例:
docker cp a23274bf7610:/home/test.java /home
查看镜像怎么构建
docker history 镜像id
Docker可视化管理工具安装
docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
Linux开放端口
开发指定端口
firewall-cmd --zone=public --add-port=端口号/tcp --permanent
重启防火墙
firewall-cmd --reload
查看端口是否开放:
firewall-cmd --zone=public --query-port=端口号/tcp