三.镜像。容器相关操作以及Docker应用部署和迁移备份
容器运行中添加端口映射
# 镜像当成是一个没有启动的操作系统
# redis镜像,mysql镜像,nginx镜像,django镜像,python镜像,指的是:linux+xx软件----》镜像跑起来就是--》容器:操作系统上运行着redis服务
# 查找镜像:
# 命令行:
docker search helloworld
docker search centos
#官方搜索:https://hub.docker.com/
# 如下图
# 获取镜像:
docker pull centos # 拉取最新的:相当于docker pull centos:latest
docker pull centos:centos7 # 拉取一个centos7
docker pull centos:centos6.7
docker pull centos:centos10 # 这个 没有,就报错
# 查看本地镜像
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 470671670cac 3 months ago 237MB
centos centos7 5e35e350aded 5 months ago 203MB
# 删除本地镜像
docker rmi 470671670cac # 通过id号删除
docker rmi centos:centos7 # 通过名字删除
# docker rmi `docker images -q`
docker images -q相当于获取所有的id号
docker rim 470671670cac 5e35e350aded
命令行查找镜像
官方搜索
详细信息
docker ps # 查看正在运行的容器#########
docker ps –a # 查看所有容器(暂停的,停止,正在运行的。。。)##########
docker ps –l # 查看最后一次运行的容器
docker ps -f status=exited # 查看停止的容器
# 重点:通过镜像创建并运行容器(两步并做一步)
创建容器命令:docker run
-i:表示运行容器
-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
--name :为创建的容器命名。容器名字不能重
-v:表示目录映射关系(前者是宿主机目录,后者是容器的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,只是操作宿主机,如果只加-i -t两个参数,创建后就会自动进去容器)。
-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
# -v:数据卷,做目录映射
# -p 网络,做端口映射
#举例:在宿主机内部跑django的容器如何链接跑mysql的容器
#1.容器也是有ip地址的,django可以直接链接
#2.将mysql的端口映射到宿主机中,比如还是映射3306,django通过访问宿主机来访问,但是注意修改端口号,否则宿主机和容器只能起一个,同一个端口只能被一个软件监听
# 演示
#基于哪个镜像跑容器:centos:centos7 如果写成centos表示跑最新的
#如果没有这个镜像呢?去远程拉,拉下来再跑
# 容器要运行,需要有一个前台进程,可以通过守护进程的方式运行容器(解释:下面这个容器的运行,是有一个bash终端挂在这,表示容器有一个进程在存活,bash关闭,容器也就关闭了,因此容器要运行,需要有一个前台进程)
docker run -it --name=mycentos7 centos:centos7 /bin/bash
# it表示运行并进入容器,-i -t缩写
#--name:起一个名字
#centos:centos7:表示基于centos的centos7版本,若不加centos7表示基于最新版
# bin/bash:表示bin路径下的base文件,他是一个软件,是进入启动容器的bash终端,可以有多个终端,用来执行命令的,可以通过执行exit逐层退出bash,最后一层bash退出就会退出docker
'''
[root@localhost ~]# docker run -it --name=mycentos7 centos:centos7 /bin/bash
[root@29b72b8c9766 /]# docker -v // 这就进入容器了,这是一个纯净的centos7的容器
bash: docker: command not found
[root@29b72b8c9766 /]# exit // 退出
exit
'''
# 以守护进程形式跑(会有一个/bin/bash前台进程命令在执行,只是并没有进入到容器内部)
docker run -di --name=mycentos2_2 centos:centos7
# 进入到容器内部操作容器
1 exec(用的最多):在docker中执行命令
docker exec -it mycentos2_2 /bin/bash
exit 退出(此时退出还有一个前台进程在存活)
docker exec mycentos2_2 ls (表示进入并执行ls命令)
2 attach (当没有)
3 ssh连接(容器要启动ssh服务22端口没有服务在监听)
# 容器的启动与停止
docker stop 容器id/名字
docker start 容器id/名字
docker restart 容器id/名字
# 文件拷贝
# 从宿主机copy到容器内部
docker cp 要拷贝的文件或者目录 容器名称:容器目录
docker cp untitled3.tar mycentos2_2:/home
# 从容器内部copy出来 (./表示当前目录下)
docker cp mycentos2_2:/home/untitled3.tar ./
# 数据卷(目录映射)
# 1.比如容器的软件是mysql,有一个root/data目录,里面放着数据信息,同步映射到宿主机的一个home/data目录,这样不论在容器中还是宿主机中增删改查data的信息都会影响到另一个,但是如过整个容器突然没了,宿主机还在,可以重新建一个容器重新挂上root/data,就可以恢复宿主机的信息到容器中,类似于文件共享。这就是数据卷
# 2.比如容器中跑的django,也可以做映射到外部宿主机上,这样在宿主机中装git,拉去最新的代码,只要重启一下容器,django就能跑最新的代码了,可以实现快速更新