docker-镜像、容器、目录映射、端口映射

1.Iaas

IaaS: Infrastructure-as-a-Service(基础设施即服务)。
第一层叫做IaaS,有时候也叫做Hardware-as-a-Service,几年前如果你想在办公室或者公司的网站上运行一些企业应用,你需要去买服务器,或者别的高昂的硬件来控制本地应用,让你的业务运行起来。

但是现在有IaaS,你可以将硬件外包到别的地方去。IaaS公司会提供场外服务器,存储和网络硬件,你可以租用。节省了维护成本和办公场地,公司可以在任何时候利用这些硬件来运行其应用。

比如我们只和一家公司进行服务器硬件的合作,这家公司负责服务器的租用和硬件的维护,他们提供的就是Iaas服务。例如私有云服务。

2.PaaS

第二层就是所谓的PaaS,某些时候也叫做中间件。你公司所有的开发都可以在这一层进行,节省了时间和资源。比如有家公司开发好了应用,有的公司会专门提供服务器并且装好mysql等软件这样的一个平台,直接将项目部署在上面即可。

PaaS公司在网上提供各种开发和分发应用的解决方案,比如虚拟服务器和操作系统。这节省了你在硬件上的费用,也让分散的工作室之间的合作变得更加容易。网页应用管理,应用设计,应用虚拟主机,存储,安全以及应用开发协作工具等。

例如阿里云就是这种类型的公司。

3.SaaS

第三层也就是所谓SaaS。这一层是和你的生活每天接触的一层,大多是通过网页浏览器来接入,也就是提供了软件服务。任何一个远程服务器上的应用都可以通过网络来运行,就是SaaS了。

你消费的服务完全是从网页如Netflix, MOG, Google Apps, Box.net, Dropbox或者苹果的iCloud那里进入这些分类。尽管这些网页服务是用作商务和娱乐或者两者都有,但这也算是云技术的一部分。

应用:比如政府应用、超市结账系统。

4.docker启动、配镜像站

1.查看docker状态。inactive表示未启动

systemctl status docker

2.启动docker

systemctl start docker

3.如果我们要下载镜像需要去远程仓库(在国外),速度较慢,地址是:https://hub.docker.com/ 。我们为了提高速度需要设置国内镜像站,我们配置阿里云镜像站:

cd /etc/docker/  # 首先切换到etc目录下的docker目录下

然后需要在阿里云中创建一个实例,在docker目录下需要建一个daemon.json目录:
image

vim daemon.json

image
image
4.再依次执行下面两句话,重启docker服务,就可以成功配好加速站:

sudo systemctl daemon-reload
sudo systemctl restart docker

5.启动与停止常用命令

1.启动docker

systemctl start docker

2.停止docker:

systemctl stop docker

3.重启docker:

systemctl restart docker

4.查看docker状态:

systemctl status docker

5.开机启动:

systemctl enable docker

6.查看docker概要信息

docker info

7.查看docker帮助文档

docker --help

6.镜像相关命令

1.查找镜像

docker search 镜像名称

建议去hub.docker.com 直接搜,更直观
image
image
2.拉取镜像:搜索之后选择合适的镜像,点击tags,复制命令到linux命令行,即可下载:
image

# centos7版本
docker pull centos:centos7

image
不写版本默认下载最新:

docker pull redis

3.查看本地镜像

docker images

CREATED指的是镜像创建的时间
image
4.删除镜像

docker rmi 镜像ID   # 可以同时删多个

5.删除所有镜像

# 查出所有镜像的id号,-q是只拿id号
docker rmi `docker images -q`

7.容器相关命令

镜像运行起来就是容器,并且一个镜像可以运行成多个容器
1.查看正在运行的容器

docker ps

2.查看所有容器

docker ps -a

3.查看最后一次运行的容器

docker ps -l

4.运行容器(其实是两步,创建容器:create,运行容器:run)
如果容器没有创建,直接执行run,就会创建并运行
run的命令有很多参数:
i:表示运行容器
t:表示容器启动后会进入容器命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)

# 命令可以简写
docker run -it  # 创建并进入容器
docker run -id  # 创建不进入容器

name :为创建的容器命名,如果不写,随机生成一个名字
v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射(举例:宿主机上运行的mysql容器监听端口是容器中的3306端口,通过映射将容器中的3306端口映射到本机,这样容器中的mysql监听的就是本机的3306端口)
查看端口占用情况:

netstat -nlp |grep 端口号

5.启动centos容器:

#  要求启动之后直接进入容器,并且给容器起名mycentos
docker run -it --name=mycentos centos:7

image
目前操作就相当于装了一台虚拟机,装上了centos。我们依然可以在该centos系统中装上mysql等软件,类似套娃的操作。容器中的软件都在容器中,在宿主机上找不到,但是会占用宿主机的内存。目前该容器中还没有vim的操作,如果想要实现vim的操作需要再装上vim软件:

yum install vim -y

6.容器退出:

exit

image
7.启动容器,不进入

docker start 容器名

image
8.进入到容器内部(本质并不是进去,而是让容器执行命令,返回结果)

docker exec 容器id 命令
docker exec 21b790a1eafc ls  # 查看id为21b790a1eafc容器内所有文件夹

image
我们也可以通过分配交互式命令行进入容器:

docker exec -it 21b790a1eafc /bin/bash

/bin/bash命令相当于进入/bin/bash的命令窗口,再执行一次相当于又进入了一层/bin/bash的窗口:
image
9.文件拷贝:拷贝之后宿主机和容器中的文件不会相互影响:
将宿主机的文件拷贝到容器中:
docker cp 宿主机文件目录 容器id:文件名
如果容器内没有该文件会自动创建,有会直接覆盖

docker cp ./a.txt 7464325d549a:a1

image
将容器中的文件拷贝到宿主机:

# 将容器id为7464325d549a的容器目录下a1文件拷贝到宿主机/home/目录下bbb.txt
docker cp 7464325d549a:/a1 /home/bbb.txt

image

10.查看容器ip:
docker inspect 容器id

docker inspect 7464325d549a
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称(容器ID)  # 快速查看容器id  172.17.0.3

image
从一个容器ping另一个容器的ip:

docker inspect --format='{{.NetworkSettings.IPAddress}}' 7464325d549a  # 查看容器mysql11的ip: 172.17.0.3
docker inspect --format='{{.NetworkSettings.IPAddress}}' 21b790a1eafc  # 查看容器centos的ip:172.17.0.4
docker exec -it 21b790a1eafc /bin/bash  # 进入到mycentos容器
ping 172.17.0.3  # 发现可以ping通

image
这样我们以后只需要将mysql、django+uwsgi、redis分别布在不同的容器中,它们之间也可以相互通信,拿到别的机器上也可以直接使用

11.删除容器:

docker rm 容器id  # 删不掉正在运行的容器
docker rm 容器id -f  # 可以删掉真正在运行的容器(不建议)

8.容器目录映射(映射之后目录下的内容都会同步)

v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个。-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
我们首先在宿主机/home/目录下创建一个目录ccc

cd /home/  # 切换到/home/目录下
mkdir ccc
cd ccc  # 切换到ccc目录下

image
在ccc目录下创建一个文件q.txt,并且在第一行写入内容:

cd ccc  # 切换到ccc目录下
touch q.txt  # 创建一个q.txt的文件
vim q.txt  # 进入到q.txt并且写入内容,按esc,:wq保存退出
pwd  # 查看当前路径,结果:/home/ccc

image
然后执行目录映射,冒号前的路径是宿主机映射的路径,冒号后是容器映射的路径。容器名不能和已创建的容器重名,也就是迁移的容器必须还没有被创建出来,执行完映射命令之后会自动创建

docker run -id --name=centos3(容器名) -v /home/ccc:/ddd centos:7

image
进入到centos3容器:

docker exec -it 2c8d3bbe9279 /bin/bash  # 进入到容器
cd ddd  # 切换到ddd目录下
cat q.txt  # 查看q.txt文件

image
说明通过映射之后宿主机内的文件和容器上的文件是同步的。不管谁在宿主机上还是容器中修改q.txt,在宿主机和容器中查看都会变化:
image
image

9.容器端口映射

p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
首先执行命令:

docker run -id --name=mysql22 -p 81:3306  -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
#  意思是本机的81端口映射到mysql容器中的3306端口。并且本机mysql连接容器中的mysql时输入密码是3306

image
image
image
image
而且容器之间可以相互隔离,以后我们可以不用在本机下载mysql和redis,直接连接容器的就可以。

posted @ 2023-04-12 20:12  ERROR404Notfound  阅读(740)  评论(0)    收藏  举报
Title