欢迎来到站长天空!

其它服务器

当前位置: 主页 > 服务器 > 其它服务器

docker从安装入门到应用部署及私有仓库搭建基础命令

时间:2025-12-21 06:30:04|栏目:其它服务器|点击:

目录
  • Docker
    • 入门到精通
  • CentOS安装Docker
    • 方法一
    • 方法二
  • Docker基础命令
    • 开启关闭
    • 查找镜像
    • 镜像操作
    • 容器操作
    • 文件拷贝
    • 目录映射(数据卷)
    • 查看容器信息
    • docker应用部署
    • 容器打包成镜像
    • 总结
  • Docker file编写
    • docker file常用命令
    • eg:基于python3.6构建docker file镜像
    • 容器部署项目,用 nuginx做负载均衡
  • Docker私有仓库搭建
    • Docker安装Mysql
      • docker内部mysql允许外部访问
        • Docker安装Redis

          Docker

          入门到精通

          ssh root@39.101.184.220
          """
          1)docker就是Linux上及其轻量的虚拟机
          2)虚拟机是存在宿主系统中,通过镜像给宿主系统拓展子系统的(一个镜像理论上可以做n个子系统)
          3)两个特别重要的概念
          	image:镜像
          	container:容器(子系统)
          4)工作方式:
          	i)在服务器系统下载docker(为服务器安装虚拟机,服务器系统就是宿主系统)
          	ii)用docker去下载对应需求的镜像:镜像操作
          	iii)通过镜像制造容器(装子系统):容器操作
          5)优势
          	i)超级轻量级,docker安装的容器体积可以按kB度量
          	ii)集群部署,docker可以通过一个镜像制造出多个一模一样的容器
          	iii)便捷管理所有镜像与容器(命令行操作)
          6)镜像和容器特点
          	一般一个镜像中只包含一种软件:比如mysql镜像,创建的容器中只有mysql环境;redis镜像,创建的容器中只有redis环境
          	注:一个镜像中有多个环境的需要自己制作镜像
          """
          docker-ce : 免费(使用最多)
          docker-ee :收费
          

          CentOS安装Docker

          方法一

          设置管理Docker的仓库

          """
          1)安装依赖
          sudo yum install -y yum-utils device-mapper-persistent-data lvm2
          2)安装稳定仓库
          sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
          """
          

          安装Docker Engine-Community

          """
          1)安装
          >: yum install docker-ce docker-ce-cli containerd.io
          2)如果提示您接受 GPG 密钥,请允许
          """
          

          方法二

          """
          # centos7 安装docker
          1 安装依赖
          sudo yum install -y yum-utils device-mapper-persistent-data lvm2
          2 设置yum源为阿里云
          sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
          3 安装
          sudo yum install docker-ce -y
          """
          docker 版本:装的最新版
          docker -v
          Docker version 19.03.8, build afacb8b
          docker -v查看版本,如果是17年之前的,就是老版本,操作习惯不一样
          

          Docker基础命令

          开启关闭

          """
          1)启动
          >: service docker start  |  systemctl start docker
          2)关闭
          >: service docker stop  |  systemctl stop docker
          3)重启
          >: service docker restart  |  systemctl restart docker
          """
          

          查找镜像

          # 查找镜像:https://hub.docker.com/
          docker search helloworld
          docker search centos
          # 拉取镜像
          docker pull centos     # 拉取最新的:相当于docker pull centos:latest  
          docker pull centos:centos7  # 拉取一个centos7 
          docker pull centos:centos6.7
          docker pull centos:centos10 # 这个 没有,就报错
          

          docker从安装入门到应用部署及私有仓库搭建基础命令

          docker从安装入门到应用部署及私有仓库搭建基础命令

          镜像操作

          """
          1)列出镜像
          >: docker image ls
          2)拉取镜像
          >: docker [image] pull 镜像名:版本
          eg: docker image pull hello-world:latest    # 最后一个版本
          3)删除镜像
          如果有容器了,可以强制删除镜像。不推荐这么做
          >: docker image rm 镜像ID
          >: docker image rm 镜像名字:镜像版本  # 通过名字删除  
          docker image rm centos:centos7
          4)将容器反向打包镜像
          >: docker save -o <文件名.tar>  <镜像名>
          5)根据打包的镜像文件加载镜像
          >: docker load -i <文件名.tar>
          """
          

          容器操作

          """
          docker exec --help      # 查看参数的含义
          1)创建容器
          >: docker run [选项参数] 镜像名 [命令]
          创建容器命令:docker run
          -i:表示运行容器
          -t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
          --name :为创建的容器命名。容器名字不能重
          -v:表示目录映射关系(前者是宿主机目录,后者是容器的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
          -d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
          -p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
          # 演示
          #基于哪个镜像跑容器:centos:centos7   如果写成centos表示跑最新的 
          #如果没有这个镜像呢?去远程拉,拉下来再跑,远程没有就报错
          # 1.容器要运行(跑完进入了容器)
          docker run -it --name=mycentos7 centos:centos7 /bin/bash
          /bin/bash:进入容器,并开一个终端
          bash:进入内层终端
          exit: 退出一层
           # 2.以守护进程形式跑(跑完没有进入容器)
          docker run -di  --name=mycentos2_2 centos:centos7
          2)查看所有容器:-a就是--all代表全部展示
          >: docker container ls [-a]
          >: docker ps [-a]
          3) 容器的启动与停止
          docker stop 容器id/名字
          docker start 容器id/名字
          docker restart 容器id/名字
          4)kill掉一个已经在运行的容器
          >: docker kill 容器id
          5)删除容器
          停止后才能删除
          >: docker  rm 容器id
          6)进入容器
          	1.exec(使用最多)
          	2.attach
          	3.ssh连接(容器要启动ssh服务22端口没有服务在监听)
          >: docker  exec 参数 容器id bash
          eg: docker exec -it mycentos7 bash
          eg: docker exec -it 685e1 bash
          eg: docker exec mycentos2_2 ls  # 在mycentos2_2的容器中执行ls,并打印结果
          7)退出容器
          >: exit
          """
          

          文件拷贝

          # 文件拷贝
          # 从宿主机copy到容器内部
          docker cp untitled3.tar mycentos2_2:/home
           # 从容器内部copy出来 
          docker cp mycentos2_2:/home/untitled3.tar ./
          

          目录映射(数据卷)

          # 映射之后,操作宿主机目录和操作容器目录会相互影响
          
          docker run -di  --name=mycentos2_3 -v /root/test:/home centos:centos7
          					  名字     宿主机/root/test映射到容器 /home   版本
          
          

          查看容器信息

          docker inspect 容器名字/容器id
          # 查看ip地址
          docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器id/名字

          docker应用部署

          # mysql服务 在docker中运行 -e表示环境变量,root密码
          docker run -id --name=mysql1 -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
          # redis服务 在docker中运行
          docker run -id --name=myredis -p 6379:6379 redis
          # docker中部署django项目 nginx + django +uwsgi
          

          容器打包成镜像

          # 把容器打包成镜像
          docker run -di --name=mydjango python:3.6
          # 安装django环境
          pip install django==1.11.9
          apt-get update
          apt-get install vim 
          # 把容器打包成镜像
          docker commit 容器名字 镜像名字
          docker commit mydjango mydjango_i
          # 基于镜像再跑起容器
          docker run -di --name=mydjango2 mydjango_i
          # 镜像打成一个tar包,压缩一下(在当前目有个mydjango.tar)
          docker  save -o 压缩包名字.tar mydjango_i
          # copy这个压缩包到任意的机器上(装了docker)
          # 把压缩包,恢复成镜像
          docker load -i 压缩包名字.tar
          容器里装了python3.6 mysql,django, uwsgi ,redis 项目在里面---》镜像--》容器
          10个容器
          django+uwsgi    mysql   redis    一个一个起:docker-compose
          100台机器,10w容器 k8s
          
          

          总结

          # 容器的操作
          查看正在运行的容器:docker ps
          查看所有容器:docker ps -a
          删除容器:docker rm 容器id/名字 容器id/名字  支持同时删多个
          容器启动停止: docker stop/start/restart 容器名字/id
          创建并启动容器:docker run -i -d -t --name=名字 -v 目录映射/数据卷 -p 端口映射/网络 镜像名字:tag
           	-镜像如果没有,会自动去拉取,然后启动
          查看容器日志:docker logs 容器id/名字
          文件拷贝: docker cp 
          查看容器信息,ip:docker inspect 容器名称(容器ID) 
          进入容器:docker exec -it 容器id /bin/bash
          docker exec 容器id ls
          ssh
          attach
          

          Docker file编写

          Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像,用来构建镜像的
          # docker pull 
          # 通过容器---》打包成镜像--》压缩--》拿到任何位置
          # 通过Dockerfile构建镜像
          1、对于开发人员:可以为开发团队提供一个完全一致的开发环境;
          2、对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了;
          3、对于运维人员:在部署时,可以实现应用的无缝移植。
          

          docker file常用命令

          命令	作用
          FROM image_name:tag	定义了使用哪个基础镜像启动构建流程  # FROM 镜像名:版本
          MAINTAINER user_name	声明镜像的创建者
          ENV key value	设置环境变量 (可以写多条)
          (核心)RUN command	是Dockerfile的核心部分(可以写多条)
              eg:写要执行的命令(centos上装一个python3.6,原来在linux上装python,如何操作,就用命令一行一行写出来)
                  RUN wget http://www..../python.tar.gz
                  RUN tar -cvf python.tar.gz
                  RUN cd python
                  RUN make && make install
                  RUN pip3 install django==1.11.9
          ADD source_dir/file dest_dir/file	将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压
          COPY source_dir/file dest_dir/file	和ADD相似,但是如果有压缩文件并不能解压
          WORKDIR path_dir	设置工作目录(上面操作的命令都是在这个目录,docker exec 进去,就在当前设置的路径下,之前是在根路径下)
          CMD [命令]    容器一运行,就会执行命令
          # ADD和COPY的区别?一个会解压,一个默认不会解压
          
          
          

          eg:基于python3.6构建docker file镜像

          # 写一个Dockerfile,基于python3.6 搭建运行环境:django,drf,uwsgi
          # 名字必须交 Dockerfile ,当你构建的时候,会在当前路径下找这个文件,自动构建
          vim Dockerfile
          FROM python:3.6
          MAINTAINER lqz
          ADD ./django_test.tar /home
          RUN pip install -r /home/django_test/requirement.txt -i https://pypi.doubanio.com/simple
          CMD ["/bin/bash"]
          # 基于docker file构建
          docker build -t='django1.11.9'   # django1.11.9就是构建完之后的镜像名字
          构建完之后就有一个django1.11.9的镜像
          # 基于该镜像构建容器
          docker run -di --name=myproject -p 8080:8080 django1.11.9
          # docker logs myproject   查看报错信息
          

          容器部署项目,用 nuginx做负载均衡

          docker从安装入门到应用部署及私有仓库搭建基础命令

          # 1 在项目路径下写Dockerfile
          FROM python:3.6
          MAINTAINER lqz
          ADD ./requirement.txt /home/
          RUN pip install -r /home/requirement.txt -i https://pypi.douban.com/simple/
          WORKDIR /home/django_test
          EXPOSE 8080
          VOLUME ["/home"]
          CMD ["uwsgi", "--ini", "/home/django_test/uwsgi.ini"]
          # 2 在项目路径下写一个uwsgi.ini
          [uwsgi]
          #也可以使用http
          http=0.0.0.0:8080
          #配置项目路径,项目的所在目录
          chdir=/home/django_test
          #配置wsgi接口模块文件路径
          wsgi-file=django_test/wsgi.py
          #配置启动的进程数
          processes=4
          #配置每个进程的线程数
          threads=2
          #配置启动管理主进程
          master=True
          #配置存放主进程的进程号文件
          pidfile=uwsgi.pid
          # 3 传到git上(我们直接复制过去了)
          在服务器从git上拉下来,解压开
          # 4 基于docker file构建镜像
          docker build -t='django1.11.9' .
          #5  运行起django+uwsgi的容器
          docker run -di --name=mydjango1 -v /home/s13/myproject:/home -p 8080:8080 django1.11.9   
          docker run -di --name=mydjango2 -v /home/s13/myproject2:/home -p 8088:8080 django1.11.9 
          # 6 基于ngixn镜像跑起一个容器来,做目录映射(在宿主机,修改nginx的配置文件)
          # 创建几个文件夹
          mkdir -p /home/nginx/conf /home/nginx/html /home/nginx/logs
          vim /home/nginx/conf/nginx.conf
          #写入
          worker_processes  1;
          events {
              worker_connections  1024;
          }
          http {
              include       mime.types;
              default_type  application/octet-stream;
              sendfile        on;
              keepalive_timeout  65;
            	upstream	node	{  # node名字随便取,下面需要用到
          			server	101.133.225.166:8080;  # 1号服务器
          			server	101.133.225.166:8088;  # 2号服务器
          		}
              server {
                  listen       80;
                  server_name  localhost;
                  location / {
                    #负载均衡配置
                    proxy_pass http://node;  # 负载均衡,随机分发请求
                  }  
                  error_page   500 502 503 504  /50x.html;
                  location = /50x.html {
                      root   html;
                  }
              }
          }
          docker run --name nginx -id -p 80:80 -v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /home/nginx/html:/etc/nginx/html -v /home/nginx/logs:/var/log/nginx nginx
          #7  访问http://101.133.225.166/, 会打到不通的docker容器内,即便有一个服务停了,也不会影响项目的运行
          # 因为你django docker容器做了目录映射---》只需要修改代码,重启容器即可(git pull 即可)
          # 不停服更新,停一半,更新,启动--在把另一半更新了
          # 停服更新
          

          Docker私有仓库搭建

          docker从安装入门到应用部署及私有仓库搭建基础命令

          # 镜像获取:
          docker pull
          dockerfile构建
          拷贝tar文件,load过来
          # 公司内部用的镜像,docker hub上没有,私服(私有服务器)
          # 操作步骤
          # 1 拉一个registry镜像  (本质是个什么?web服务(想像成 web项目在里面))
          docker pull registry
          # 2 跑起容器来
          docker run -di --name=registry -p 5000:5000 registry
          # 3 浏览器输入地址(目前是空的)
          http://宿主机:5000/v2/_catalog
          # 4 vi /etc/docker/daemon.json (文件如果没有就创建出来),以后docker pull 先从自己配置的这个拉,再去远程拉
          {"insecure-registries":["10.0.0.200:5000"]}   # 宿主机地址
          # 5 重启docker 服务
          systemctl restart docker
          # 6 启动容器
          docker restart registry
          # 7 标记本地的镜像(可能是dockerfile构建的,也可能是通过容器打包成的)
          docker tag django1.11.9 101.133.225.166:5000/django1.11.9
          # docker tag redis 101.133.225.166:5000/myredis
          # 8 把标记好的本地镜像,传到私服
          docker push 101.133.225.166:5000/django1.11.9
          #docker push 101.133.225.166:5000/myredis
          # 9 再访问这个地址http://宿主机:5000/v2/_catalog
          就能看到你上次的镜像再里面了
          # 10 只要在etc/docker/daemon.json,配置了这个{"insecure-registries":["101.133.225.166:5000"]} 的所有小伙伴,都可以拉取我上传的镜像
          docker pull 101.133.225.166:5000/myredis
          # 公司可能没有私服,直接通过dockerfile构建
          # 大一点的公司,搭建私有仓库,里面放了一些镜像(不让你去docker hub下了,直接只从私有仓库下载)
          

          Docker安装Mysql

          """
          1)安装
          >: docker image pull mysql:5.7
          >: 如果报错m1安装:docker pull --platform linux/x86_64 mysql
          2)创建容器:root根用户的密码MYSQL_ROOT_PASSWORD采用的是root
          >: docker container run -itd -p3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.7
          docker run -id --name=mysql3308 -p3308:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
          注:本地测试
          >: mysql -hIP -P端口 -uroot -p密码
          >: mysql -h 39.99.192.127 -P 3306 -u root -p
          >: root
          >: create database luffy default charset=utf8;
          >: grant all privileges on luffy.* to 'luffy'@'%' identified by 'Luffy123?';
          >: grant all privileges on luffy.* to 'luffy'@'localhost' identified by 'Luffy123?';
          >: flush privileges;
          """
          
          

          docker内部mysql允许外部访问

          M1拉镜像:docker pull --platform linux/x86_64 mysql
          先进入到mysql容器内部,并登陆mysql -uroot -p
          use mysql;
          update user set authentication_string = password('123456') where user = 'root';
          GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
          GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' IDENTIFIED BY '123456' WITH GRANT OPTION;
          用户名:root
          密码:123456
          
          

          Docker安装Redis

          """
          1)下载镜像
          >: docker pull redis:4.0.9
          2)创建容器
          >: docker container run -itd -p6379:6379 redis:4.0.9
             ## : -p宿主端口(服务器):容器端口(通过镜像安装的)
          3)进入容器
          >: docker container exec -it <容器名称/容器ID> bash
          eg: docker exec -it 685e1 bash
          4)测试
          >: redis-cli
          >: redis-cli -h 39.99.192.127 -p 6379
          >: config set requirepass Admin123
          """
          

          以上就是docker从安装入门到应用部署及私有仓库搭建基础命令的详细内容,更多关于docker安装应用部署私有仓库搭建命令的资料请关注其它相关文章!

          上一篇:openstack云计算组件glance部署及操作步骤

          栏    目:其它服务器

          下一篇:教你如何获取Harbor的带tag的镜像清单

          本文标题:docker从安装入门到应用部署及私有仓库搭建基础命令

          本文地址:https://zz.feitang.co/server/32375.html

          广告投放 | 联系我们 | 版权申明

          申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

          如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

          联系QQ:257218569 | 邮箱:257218569@qq.com

          Copyright © 2018-2025 站长天空 版权所有 Powered by EyouCms冀ICP备14023439号