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,再拉取镜像,优先从私有仓库拉,没有在去国外

posted @ 2020-04-19 22:16  fwzzz  阅读(318)  评论(0编辑  收藏  举报