本文主要是介绍【docker1】docker的下载安装、容器与docker、Dockerfile的写法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1 容器
1、容器1、什么是容器?用镜像启动的一个对外可以提供服务的进程即为容器。1、容器的本质是进程2、容器是由镜像创建的,跟镜像中保存的内容完全一致。3、容器与容器之间是完全隔离的(可以理解为国中之国)4、每一个容器都需要做的是尽量保持自己的体积足够的小。2、容器的生命周期容器之内必须至少有一个进程运行在前台。如果一个进程都没有的话,那么此容器就相当于完成了它的声明周期。3、容器的基本使用0、查看本机容器列表docker ps # 查看本机容器列表[root@docker ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES容器的ID 镜像 容器的启动命令 容器的创建时间 容器的状态 容器的端口 容器的名称STATUS:UP : 启动状态Exited : 停止状态Created : 容器已经创建,当时没有启动参数:-a : 查看系统上所有的容器(包含未启动)-q : 只显示容器ID1、创建容器docker run # docker run是创建并启动容器docker create # docker create是创建容器docker create 中的参数跟 docker run 类似 主要其本身的功能不同。docker run 格式:docker run [参数] 镜像 [启动命令]参数和启动命令可以省略。容器的启动流程:①:查看本地是否存在正在使用的镜像。②:如果本地不存在使用的镜像,则去仓库下载③:根据镜像来启动容器参数:-d : 以守护进程方式运行容器。--name : 自定义容器的名称[root@docker ~]# docker run -d --name nginx nginx-p : 指定一个端口映射-P :随机一个端口映射-i : 打开标准输出-t :创建一个终端-e :在容器内部增加一个环境变量-h : 指定一个主机名(默认的主机名是容器的缩写版ID )-v : 指定一个挂载卷(将宿主主机的目录挂载到容器内,从而实现文件互通)--network : 链接一个网桥--link : 链接一个容器在宿主主机上执行一个容器内部的命令docker exec [容器的ID或名称] [需要在容器内部执行的名]docker exec centos3 printenv 启动一个容器docker start [容器的名称|ID][root@docker opt]# docker start centos62、停止容器docker stop [容器的名称|ID]3、删除容器docker rm [容器的名称|ID]docker rm -f [容器的ID或名称]案例:删除所有容器:docker rm -f $(docker ps -a -q)4、查看容器详细状态docker inspect [容器的ID或名称]案例:要求判断指定容器是否正在运行?docker inspect -f '{{ .State.Running }}' 2d4f2e701fa85、复制容器中的内容1、将容器内的文件复制到宿主主机docker cp [容器的ID]:[文件路径] 宿主主机路径docker cp ae1cde866e07:/root/init.sh /tmp/2、将宿主主机上的内容复制到容器docker cp [宿主主机路径] [容器的ID]:[文件路径]docker cp init.sh ae1cde866e07:/root/6、进入容器1、attachattach是进入容器,原理是将容器内的PID为1的进程开辟一个管道,链接到宿主主机。当在宿主主机上退出时,容器也随即退出(结束了生命周期)2、exec(推荐)exec其本质是在宿主主机上执行一个容器内的命令,但是加上-it参数,可以达到进入容器的效果,其原理是在容器内部新创建一个bash进程。所以当exec退出时不影响容器的正常运行。docker exec -it [容器的名称] [进入容器执行的命令]3、nsenternsenter的原理是建立一个管道进程,链接到容器的内部。nsenter --target $( docker inspect -f '{{.State.Pid }}' ) --mount --uts --ipc --net --pid[root@docker ~]# nsenter --target $( docker inspect -f '{{.State.Pid }}' centos ) --mount --uts --ipc --net --pid4、ssh的方式(及其不推荐)7、保存容器为镜像1、保存镜像(针对点是镜像)将镜像打包,发送到远程服务器docker save # 将镜像保存成压缩包[root@docker ~]# docker save -o image.tar nginx:latest centos:latest[root@docker ~]# docker save > image.tar nginx:latest centos:latestdocker load # 将镜像包导入本地镜像中[root@docker ~]# docker load -i image.tar [root@docker ~]# docker load < image.tar 2、保存容器为镜像(针对点是容器)将容器打包成镜像1、将容器保存成镜像docker exportdocker export -o nginx.tar modest_tharp2、将镜像包导入本地镜像中docker import docker import nginx.tar nginx:v13、保存容器将容器保存成本地镜像docker commit docker commit -a "ShanHe" -m "这是一个弟弟" -p modest_tharp nginx:v28、查看容器的运行日志docker logs [容器的ID或名称]docker logs modest_tharp参数:-f : 持续监控docker logs -f modest_tharp9、暂停容器和重新运行容器容器将暂停服务docker pause modest_tharp重新运行容器,恢复提供和服务docker unpause modest_tharp10、容器的运行状态案例:用容器搭建一个小游戏1、代码(宿主主机)2、将目录映射到容器3、映射端口docker run -d --name mario -v /opt/html5-mario:/usr/share/nginx/html -p 8080:80 nginx4、浏览器测试
2 docker
1、Docker1、现有的互联网架构的劣势1000台虚拟机(CentOS 7)1、保证百分百不宕机CentOS 7 : systemctl start mysqldCnetOS 6 : service mysqld start CentOS 7 : yum install mysql Ubuntu 16 : apt-get install mysqlbusybox : apt install mysql 2、要求自动化(Ansible)service : name: mysqld yum:name: mysqlwhen: apt:name: mysqlwhen 3、自动化运维(Python 操作 Ansible)4、如果我们的虚拟机不支持我们所需要安装的机器的时候?5、怎样保证快速稳定的部署并运行应用?需要一个提前打包好了的,拿来就能运行的应用,而且需要支持各种异构环境的服务变得尤为重要。镜像 ---> 容器 ---> 运行一个容器隔离的环境 ---> 容器2、Docker简介docker是一个容器工具,包含docker中的三大概念:镜像、容器以及仓库。容器编排工具docker三剑客kubernetes 占领容器编排市场90% 3、安装Dockerdocker分为企业版和社区版企业版 : docker 社区版 : docker-ce https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/Packages/# 安装依赖包yum install -y yum-utils device-mapper-persistent-data lvm2# 安装yum源yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.reposed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo# 安装 [root@localhost ~]# yum install docker-ce-19.03.9 -y4、镜像1、什么是镜像?用来启动容器的模板,镜像一般是存在镜像仓库中的。镜像仓库地址:https://hub.docker.com/search?type=image仓库分为三种:官方仓库: hub.docker.com第三方仓库: https://cr.console.aliyun.com/cn-hangzhou/instance/repositories自建仓库 : haobor2、镜像的相关命令1、搜索镜像[root@localhost ~]# docker search centosNAME DESCRIPTION STARS OFFICIAL AUTOMATEDcentos The official build of CentOS. 6809 [OK] ansible/centos7-ansible Ansible on Centos7 135 [OK]镜像的名称 该镜像的介绍 镜像的收藏数 是否是官方镜像 是否是自建镜像2、下载镜像[root@localhost ~]# docker pull centos镜像名称的构成:[仓库URL]/[仓库的名称空间]/[仓库的名称]:[镜像的版本号]默认的仓库URL:docker.io默认的仓库名称空间:library仓库的名称:没有默认镜像版本号:默认是latest3、查看本地镜像列表docker images 或者 docker image ls[root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZEcentos latest 5d0da3dc9764 5 weeks ago 231MBREPOSITORY:[仓库URL]/[仓库的名称空间]/[仓库的名称]TAG : 版本号IMAGE ID : 缩写版的镜像IDCREATED :创建该容器到现在的时间SIZE :镜像大小[root@localhost ~]# docker image lsREPOSITORY TAG IMAGE ID CREATED SIZEcentos latest 5d0da3dc9764 5 weeks ago 231MB4、查看镜像的详情docker inspect [镜像名称或ID]5、更改镜像的名称docker tag [原来的名称] [新名称]6、上传镜像将镜像上传至远程仓库。1、登录仓库2、修改镜像名称docker tar registry.cn-hangzhou.aliyuncs.com/k8sos/centos:v13、上传镜像docker push [仓库URL]/[仓库的名称空间]/[仓库的名称]:[版本号]7、登录仓库docker login [仓库URL]仓库URL默认是:docker.io 8、创建镜像9、删除镜像docker rmi [仓库的名称ID]docker rmi [root@localhost ~]# docker rmi test:v110、修改镜像镜像一旦被创建,将无法进行修改,除非重新创建。11、查看镜像的构建历史[root@localhost ~]# docker history centosIMAGE CREATED CREATED BY SIZE COMMENT5d0da3dc9764 5 weeks ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B <missing> 5 weeks ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B <missing> 5 weeks ago /bin/sh -c #(nop) ADD file:805cb5e15fb6e0bb0… 231MB
Dockerfile的写法
1、访问容器中的服务1、端口映射2、使用IP# 构建镜像1、Dockerfile规范:Dockerfile命名必须D大写其他必须小写。Dockerfile中所有的指令必须大写构建镜像的命令docker build 参数:-t : 指定构建镜像的名称1、FROM指定基础镜像。在Dockerfile中唯一一个必须项。2、RUN在构建镜像时,运行指定的命令。注意:运行的命令必须是基础镜像中包含的命令;执行的结果直接保存在镜像中。3、ADD将指定的文件上传到镜像中。4、COPY将指定的文件复制到镜像中。COPY 和 ADD 之间的区别?1、ADD支持自动解压功能(只支持tar包解压),COPY不支持2、ADD支持通过URL下载文件(不支持自动解压),COPY不支持5、EXPOSE指定容器需要向外暴露的端口如果没有指定任何端口,可以使用-p做端口映射,但是不能使用-P做端口映射。6、VOLUME指定挂在卷,指定的挂载卷并不是设置了就挂载到指定的目录。当容器启动的时候,如果添加了-v参数,以-v参数为准,如果没有,则在宿主主机上的/var/lib/docker/volumes,随机映射。7、CMD指定一个容器的启动命令。全局只能有一个,如果有多个,最后一个生效。exec格式["nginx", "-g", "daemon off;"]shell格式nginx -g 'daemon off;'8、WORKDIR设置工作目录。运行应用程序时的启始目录(默认是根目录),可以这样理解,执行命令时相对路径的原始目录。9、ARG设置运行时变量。案例:要求写一个Dockerfile,实现每次安装的软件都是自定义。[root@kubernetes docker]# docker build --build-arg=PACKAGE=zsh -t nginx:v15 .10、ONBUILD触发器,ONBUILD后面跟指令,在构建是不会执行,当当前镜像作为基础镜像构建时执行。11、ENV设置一个环境变量。12、MAINTAINER设置维护者信息。13、ENTRYPOINT设置启动命令。ENTRYPOINT 和 CMD 的区别1、ENTRYPOINT 作为启动命令时无法被docker run覆盖(如果docker run指定命令,会被认为成ENTRYPOINT的参数)。
2、如果ENTRYPOINT和CMD指令同时存在,则CMD的相关内容会被设置成ENTRYPOINT的参数2、使用Dockerfile构建项目构建MySQL、PHP已经nginx镜像,实现搭建discuzGRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;FLUSH PRIVILEGES;# docker-compose # Horbor私有仓库server {server_name _;listen 80;root /usr/share/nginx/html;location / {index index.php ;}location ~* \.php$ {fastcgi_pass 127.0.0.1:9000;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include fastcgi_params;}}
这篇关于【docker1】docker的下载安装、容器与docker、Dockerfile的写法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!