商城系统app开发如何满足不断变化的市场需求与用户期待
874
2022-11-17
dock 安装部署和初级管理命令
环境:CentOS Linux release 7.6.1810 (Core) #cat /etc/redhat-release3.10.0-957.el7.x86_64 #uname -r
docker从1.13版本之后采用时间线的方式作为版本号,分为社区版CE和企业版EE。社区版是免费提供给个人开发者和小型团体使用的,企业版会提供额外的收费服务,比如经过官方测试认证过的基础设施、容器、插件等。社区版按照stable和edge两种方式发布,每个季度更新stable版本,如17.06,17.09;每个月份更新edge版本,如17.09,17.10。一、docker安装
二、镜像管理命令1、搜索镜像docker search centos #搜索所有的centos的镜像2、获取镜像docker pull centos #获取centos镜像3、查看本机镜像docker images4、删除镜像docker rmi imageID/imagename #删除docker镜像#删除镜像前先删除依赖镜像的所有容器 docker rm5、导出镜像docker save 镜像名 >/tmp/docker_name.tardocker image save 镜像名 >/tmp/docker_name.tar6、导入镜像docker load < 镜像docker image load < 镜像docker image ls #查看导入情况7、给镜像打标签docker image ls #查看目前镜像标签docker tag centos centos:7.7docker image tag nginx:1.11 nginx:1.12
8、查看pull镜像的版本
docker image inspect mysql:latest |grep -i version
三、容器管理1、启动容器docker create -it centos /bin/bash #创建一个容器docker ps -a #查看容器状态,目前容器是停止状态docker start CONTAINER ID(容器id) #根据创建容器的id启动docker ps -a #查看容器是否处于运行状态docker attach CONTAINER ID(容器id) #根据id进入启动的容器中#可执行相应命令 cal/ls/ps -efexit #退出容器
docker run centos /bin/echo "Hello World"docker run --name mydocker1 -t -i centos /bin/bash## --name 定义容器名称, -t 分配一个伪终端绑定到容器的标准输入上## -i 让容器的标准输入保持打开,/bin/bash 执行一个命令创建容器时,docker后台运行的标准操作包括:1、检查本土是否存在指定的镜像,不存在则从公有仓库-;2、利用镜像创建一个容器, 并启动该容器3、分配一个文件系统给容器,并在吟诗的镜像层外面挂载一层可读写层;4、从宿主主机的网桥接口中桥接一个虚拟接口到容器中;5、从网桥的地址池配置一个ip地址给容器;6、执行用户指定的应用程序;7、执行完毕后容器被自动终止;#启动已终止的容器 docker startdocker ps -a #查看所有的容器docker start CONTAINER ID(容器id) #启动一个终止的容器docker ps #查看已经启动的容器
##守护进程运行(后台运行) -d参数docker run -d centos /bin/bash -c "while true;do echo hello world;sleep 1;done"docker ps #查看正在运行的容器docker logs container ID(容器id) #获取容器输出信息2、停止容器docker ps -a #查看所有的容器docker stop container id #停止容器##当容器中的指定的应用终结时,容器也会自动终结,当启动一个终端容器,用户通过exit或ctrl+d退出终端,创建的容器也会立刻停止3、进入容器3.1、attach命令docker attach container name/id #通过attach进入容器#当多个终端attach到同一容器时,所有窗口会同步显示,当其中一个终端因命令阻塞,其它窗口也无法执行操作,并且通exit退出后容器自动终止3.2、nsenter命令 #需root权限yum install -y util-linuxdocker ps -adocker inspect -f "{{.State.Pid}}" container id #找到容器的第一个进程id,后面可容器id或容器名nsenter -t 容器第一个进程id -m -u -i -n -p #通过这个pid连接到容器#通过nsenter进入再退出容器还保持在运行状态#可通过脚本简化以上两条命令cat en_docker.sh#!/bin/bash#user nsenter to access dockerdocker_in(){ name_id=$1 pid=$(docker inspect -f "{{.State.Pid}}" $name_id) nsenter -t $pid -m -u -i -n -p}docker_in $1./en_docker.sh docker name/id #执行脚本加上容器id或name快速进入3.2、exec命令docker exec -it dockername /bin/bashexitdocker ps4、导出和导入容器4.1、导出容器docker export dockername > back.tar #导出一个容器,也可使用docker export -o back.tar dockername4.2、导入容器cat back.tar |docker import - test/centos:7.65、删除容器5.1、删除终止状态的容器docker ps -a #查看当前所有容器状态docker rm dockerid #删除已经停止的容器5.2、删除一个运行中的容器,-f参数,docker发送stgkill信号给容器,再进行删除5.3、清理所有处于终止状态的容器--->慎用docker rm $(docker ps -a -q) #获取全部容器的id,进行删除 四、docker数据管理docker容器中管理数据有两种方式:数据卷数据卷容器1、数据卷可供一个或多个容器使用的特殊目录,它饶过ufs,提供以下特性:a、数据卷可以在容器之间共享和重用b、对数据卷的修改会立马生效c、对数据卷的更新,不影响镜像d、数据卷默认会一直存在,即使容器被删除1.1 管理卷docker volume create myvolume #创建一个数据卷docker volume inspect myvolume #查看数据卷的信息docker volume ls #查看数据卷列表1.2 用卷创建一个容器docker run -d -it --name mycentos --mount src=myvolume,dst=/data centos #创建一个mycentos容器,并将myvolume数据卷挂载到容器的/data目录docker exec -it mycentos /bin/bash #进入容器ls /data #查看目录为空#在另一个终端创建文件后再查看,有文件cd /var/lib/docker/volumes/myvolume/_data #在另外一个终端进入到数据目录里面echo "hello world" >> test.txt #在数据目录创建一个文件#再开一个终端创建一个容器,挂载同样的数据卷,实现共享和重用docker run -d -it --name mycentos01 --mount src=myvolume,dst=/data centosdocker exec -it mycentos01 /bin/bashls /data/ #可发现数据是一样的#另一种创建容器直接挂载数据卷,-v 数据卷名字:挂载路径,默认权限是rw,也可指定rodocker run -d -it --name mycentos02 -v myvolume:/test:ro centos#创建容器,并将数据卷挂载到容器的/test目录docker exec -it mycentos02 /bin/bashls /test1.3、删除数据卷#需先停止使用数据卷的容器,删除容器后才能删除数据卷#删除容器不会自动删除数据卷docker rm mycentos mycentos01 mycentos02 #删除容器docker volume rm myvolume #删除数据卷1.4、挂载一个主机目录到容器中的目录docker run -d -ti --name web -v /webapps:/opt/webapps centos#创建名叫web的容器,并将宿主机的/webapps目录,挂载到容器中的/opt/webappsls /webapps/ #查看宿主机的目录,如没有会自动创建echo "你好" >>/webapps/index.html #追加一个文件进去docker exec -ti web /bin/bash #进入容器cat /opt/webapps/index.html #查看容器对应目录文件的数据1.5、挂载一个宿主机文件作为数据卷docker run --rm -it -v ~/.bash_history:/.bash_history centos /bin/bash#创建一个容器,并将宿主机的文件挂载到容器的相应文件--rm #创建容器时此参数表示容器终止时自动删除2、数据卷容器# 如有持续更新的数据需在容器间共享,最好创建数据卷容器# 数据卷容器就是一个正常的容器,可提供数据卷给其它容器挂载docker run -d -v /dbdata --name dbdata centos #创建一个数据卷容器docker run -d -it --volumes-from dbdata --name db1 centos #创建一个db1容器,使用参数--volumes-from来挂载dbdata容器中的数据卷docker exec -it db1 /bin/bash #进入db1容器ls #查看已成功挂载dbdata数据卷touch dbdata/filedb1 #在dbdata目录中创建一个文件docker run -d -it --volumes-from dbdata --name db2 centos #创建一个db2容器,继续挂载dbdata容器中的数据卷docker exec -it db2 /bin/bash #进入db2容器中ls #查看也成功挂载dbdata数据卷ls dbdata/ #查看db1容器中创建的filedb1文件,看容器间是否数据共享了docker run -d -ti --name db3 --volumes-from db1 centos #创建db3,挂载db1容器的数据卷docker exec -it db3 /bin/bash #进入db3容器中ls dbdata/ #查看目录,确认是否有 filedb1文件#--volumes-from 挂载的数据卷容器自身需保持运行状态,如删除挂载数据卷容器的其它容器(db1 db2 dbdata),数据卷也不会自动删除,如要删除一个数据卷,必须在删除最后一个还挂载它的容器时使用 docker rm -v来指定同时删除关联的容器五、docker网络管理1、外部访问容器1.1 -P,docker随机映射一个端口到内容容器开放的网络端口docker run -d -P --name mynginx nginx:1.12 #创建一个容器,通过-P随机映射宿主机的端口到容器的网络端口docker ps #查看容器信息,有相应宿主机端口到容器端口的映射curl localhost:port #测试是否访问到容器docker logs -f mynginx #查看应用日志1.2、-p指定要映射的端口,在一个指定端口上只能绑定一个容器ip:hostport:containerportdocker run -d -p 8080:80 --name mynginx01 nginx:1.12docker psdocker run -d -p 127.0.0.1:18081:80 --name mynginx02 nginx:1.12docker psdocker run -d -p 127.0.0.1::80 --name mynginx03 nginx:1.12 #本地任意端口到容器80,宿主机自动分配一个端口docker ps docker run -d -p 127.0.0.1:8081:80/udp --name mynginx04 nginx:1.12 #映射8081到容器80,并指定udp1.3 查看映射端口配置docker port mynginx01docker inspect #可获到容器内部网络地址所有变量docker run -d --name mynginx05 -p 8082:80 -p 8083:443 nginx:1.12 #多次使用-p,同时绑定多个端口docker ps 2、容器互联2.1 --link参数让容器之间安全进行交互docker run -e MYSQL_root_PASSWORD=123456 -d --name mydb mysql #创建一个新数据库容器docker run -d -P --name myweb --link mydb:db nginx:1.12 #创建一个web容器,并连接到mydb数据库容器docker ps##避免暴露数据库端口到外部网络上docker run --rm --name myweb1 --link mydb:db nginx:1.12 env #创建web容器,连接到mydb,查看web容器的环境变量docker run --rm -ti --name myweb2 --link mydb:db nginx:1.12 /bin/bash #创建web容器,同样连接mydbcat /etc/hosts#host信息被添加到父容器的/etc/hosts文件
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~