• 20200331 docker容器镜像应用私有仓库


    昨日回顾

    # 1 docker概念:
    	-版本(17.x以上,都是新版本),docker ce 和docker ee
    	-轻量级,环境问题(开发一套环境,运维一套环境)
      -镜像和容器:镜像是一系列文件:redis镜像(linux系统+redis软件)  容器:当成操作系统
      -隔离:容器里部署我的项目
      -宿主机:运行docker软件的机器
      -c/s架构:通过resful交互
      
    # 2 镜像操作
    	-搜索镜像:docker search 镜像名字 
      -下载镜像:docker pull 镜像名字:tag   # 如果不跟,默认下载最新的(******)
      -查看本地镜像:docker images   #(****)
      -删除本地镜像:docker rmi 镜像id/镜像名字
      	docker rmi 4453 778 333 
        
    # 3 容器操作
    	-docker ps  # 查看正在运行的容器
      -docker ps -a # 查看所有容器(运行和停止)
      -状态:创建,运行,停止,暂停
      -启动和停止:dokcer stop 容器id/容器名字   
      -docker start 容器id/容器名字
      
    

    docker容器与应用

    1. 容器操作

    操作id号的时候可以简写
    docker rm f1	# 只写前两个或几个
    
    # bash在等待用户输入命令
    

    容器创建

    docker create --name=容器名称
    docker create -i --name=mycentos1 centos:7 /bin/bash
    # 创建一个容器,执行的第一个命令是/bin/bash(就是新开了一个控制台)
    
    
    # 创建一个容器,执行的第一条命令是/bin/bash    没有运行
    docker create -it --name=mycentos1 centos:7 /bin/bash
    # 如果后面跟的命令是一个能夯住的命令,容器在启动的时候,会一直运行,否则,容器一启动就停止
    
    
    
    
    参数:
        -i:表示运行容器
        -t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
        --name :为创建的容器命名。
        -d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
    
    
        -p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
        -v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
    

    容器运行

    docker start 容器id/名字
    

    容器创建并运行

    docker run -id --name=mypython python:3.6	# 创建并运行,执行后台运行命令(/bin/bash)
    
    docker run -it --name=mypython python:3.6	# 创建并运行,执行镜像的启动命令(退出就关闭了容器)
    
    docker run -idt --name=mypython python:3.6	# 创建并运行(前台运行,相当于在容器内部)
    	- 在容器内部
    	- i表示运行,d表示执行镜像本身hang住的命令,-t表示使用/bin/bash 执行
    

    进入容器

    docker exex 命令(一般执行后台命令)
    docker exec 464das4214 ps -a
    docker exec 464das4214 python	# 进入容器内的python
    
    # 通过exec执行命令
    # bash在等待用户输入命令
    
    docker exec -it 464das4214 /bin/bash	#执行bin/bash命令,连接到新的伪终端操作
    
    # docker attach asdas442	了解,也是进入容器(连接到第一个进程上)
    
    # ssh连接(容器安装ssh服务)
    
    

    容器停止

    docker stop id或名字
    

    容器删除

    docker rm id或名字
    

    容器信息

    docker inspect 名字/ID
    

    过滤IP地址

    docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql
    

    img

    文件拷贝

    从容器到宿主机

    docker cp 当前路径下文件 容器名/ID:容器路径
    docker cp 1.txt mycentos:/home
    

    从宿主机到容器

    # 在宿主机中使用cp命令
    docker cp centos7:/home/1.txt 1.txt
    docker cp  容器名/ID:容器路径 当前路径
    

    总结

    docker run :创建并运行
    docker exec : 容器执行命令(通常用来进入容器) docker exec -it 容器id/名字 /bin/bash
    

    2. 网络卷和数据卷

    目录挂载 -v

    # 在宿主机的目录映射到容器,宿主机test文件夹映射到容器内部
    docker run -id --name=mycentos -v /root/test/:/home centos:7
    docker run -id --name=容器名 -v 宿主机文件夹:容器文件目录 基于镜像
    

    端口映射 -p

    docker run -id --name=myreids -p 6378:6379 redis
    docker run -id --name=容器名 -p 宿主机端口:容器端口 基于镜像
    
    # 同一个端口,只能被一个容器使用
    

    3. 应用部署

    在docker中部署项目服务(redis,mysql,Nginx)

    # 部署mysql
    1. 拉一个镜像	
    	docker pull mysql:5.7
    	
    2. 运行启动容器	
    	docker run -id --name=mymysql -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123 mysql:5.7		# -e设置mysql密码(不然是随机的root密码)
    	
    3. 进入mysql容器
    	docker exec -it mymysql /bin/bash
    	
    4. 使用mysql
    	mysql -uroot -p	# 登录
    	# 数据库操作
    
    

    img

    4. 备份迁移

    容器打包成镜像

    # docker commit 容器名 新镜像名
    docker commit centos7 my_centos7_image
    

    镜像打包成压缩包

    # docker save -o 压缩包名.tar 镜像名称
    docker save -o centos_mt.tar my_centos7_image
    

    压缩文件恢复镜像

    # docker load -i 压缩包名称
    docker load -i centos_mt.tar
    

    5. Dockerfile

    在Docker中创建镜像最常用的方式,就是使用Dockerfile。Dockerfile是一个Docker镜像的描述文件,我们可以理解成火箭发射的A、B、C、D…的步骤。Dockerfile其内部包含了一条条的指令每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建

    Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像
    

    常用命令

    FROM image_name:tag 
    	定义了使用哪个基础镜像启动构建流程
    MAINTAINER user_name 
    	声明镜像的创建者
    ENV key value 
    	设置环境变量 (可以写多条)
    RUN command 
    	是Dockerfile的核心部分(可以写多条)
    ADD source_dir/file dest_dir/file 
    	将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压
    COPY source_dir/file dest_dir/file 
    	和ADD相似,但是如果有压缩文件并不能解压
    WORKDIR path_dir 
    	设置工作目录
    
    

    创建镜像

    创建文件Dockerfile

    文件文件名,必须叫Dockerfile

    输入指令

    FROM python:3.6
    MAINTAINER fw
    RUN pip install django==1.11.9  -i https://pypi.doubanio.com/simple
    RUN mkdir /home/fw
    WORKDIR /home/fw
    
    /*
    基于的镜像
    用户
    执行的命令 安装django
    执行的命令 创建文件夹
    工作目录
    */
    

    build构建镜像

    docker build -t='django_img' .   
    # 构建出django_img 镜像(在当前目录中)
    

    img

    其他操作

    查看创建后的镜像
    	docker images
    制作容器
    	docker run -id --name=mydjango django_img
    查看容器
    	docker ps
    进入容器
    	docker exec -it mydjango /bin/bash
    

    img

    6.私有仓库

    img

    公司自己的镜像,放在私有仓库(公司内部使用)
    私有仓库本质就是一个web项目(linux+registry(用其他语言写的一个web服务))
    

    1.制作私有

    1  docker pull registry   # 拉取私有仓库registry镜像
    
    2. docker run -di --name=registry -p 5000:5000 registry  # 运行registry容器并对应端口
    
    3. 浏览器访问可以直接访问  # 返回空 {"repositories":[]}
    	接口: http://10.0.0.200:5000/v2/_catalog
    	http://虚拟机地址:端口号/v2/_catalog
    

    img

    2. 修改仓库地址文件daemon.json

    修改daemon.json

    vi /etc/docker/daemon.json
    
    # 添加文件内容:
    	# "insecure-registries":["端口的ip地址"]
    	"insecure-registries":["http://10.0.0.200:5000"]
    	
    
    修改之后:
    {
    "registry-mirrors": ["https://reg-mirror.qiniu.com"],
    "insecure-registries":["http://10.0.0.200:5000"]
    }
    

    3. 启动服务

    重启docker服务

    所有容器都是停止状态

    systemctl restart docker
    

    启动registery容器

    docker start registry
    

    4. 镜像操作

    标记镜像

    # docker tag 镜像名 私有仓库地址ip/镜像名
    docker tag django_img 10.0.0.200:5000/django_img
    

    img

    上传镜像 (私有仓库)

    docker push 10.0.0.200:5000/django_img
    

    img

    浏览器继续访问

    访问:http://10.0.0.200:5000/v2/_catalog
    看到了上传的镜像:
        {"repositories":["django_img"]}
    

    以后只要同时配置了daemon.json,再拉取镜像,优先从私有仓库拉,没有在去国外

  • 相关阅读:
    北邮OJ103.反转单词 c++/java
    北邮oj 104. 912星球的研究生
    北邮oj 97. 二叉排序树
    北邮OJ 89. 统计时间间隔 java版
    用欧几里得定理求最大公约数和最小公倍数
    shell执行${var:m:n}报错Bad substitution解决办法
    基于ffmpeg不同编码方式转码后的psnr对比
    ffmpeg使用ss与t参数对视频进行剪辑
    黑菜菌的JAVA学习笔记
    Linux服务器内存监控—每小时检查&超出发送邮件&重启占用最高的Java程式
  • 原文地址:https://www.cnblogs.com/fwzzz/p/12734594.html
Copyright © 2020-2023  润新知