1.容器技术 vs 虚拟机
我们知道和一个单纯的应用程序相比,操作系统是一个很重而且很笨的程序,简称笨重,有多笨重呢?
我们知道操作系统运行起来是需要占用很多资源的,大家对此肯定深有体会,刚装好的系统还什么都没有部署,单纯的操作系统其磁盘占用至少几十G起步,内存要几个G起步。
如果有一种技术可以让我们避免把内存浪费在“无用”的操作系统上岂不是太香?这是问题一,主要原因在于操作还有另一个问题,那就是启动时间问题,我们知道操作系统重启是非常慢的,因为操作系统要从头到尾把该检测的都检测了该加载的都加载上,这个过程非常缓慢,动辄数分钟,因此操作系统还是太笨了。
那么有没有一种技术可以让我们获得虚拟机的好处又能克服这些缺点从而一举实现鱼和熊掌的兼得呢?
答案是肯定的,这就是容器技术。
什么是容器
容器一词的英文是container,其实container还有集装箱的意思,集装箱绝对是商业史上了不起的一项发明,大大降低了海洋贸易运输成本。让我们来看看集装箱的好处:系统太重了。
- 集装箱之间相互隔离
- 长期反复使用
- 快速装载和卸载
- 规格标准,在港口和船上都可以摆放
与虚拟机通过操作系统实现隔离不同,容器技术只隔离应用程序的运行时环境但容器之间可以共享同一个操作系统,这里的运行时环境指的是程序运行依赖的各种库以及配置。
什么是docker
docker是一个用Go语言实现的开源项目,可以让我们方便的创建和使用容器,docker将程序以及程序所有的依赖都打包到docker container,这样你的程序可以在任何环境都会有一致的表现,这里程序运行的依赖也就是容器就好比集装箱,容器所处的操作系统环境就好比货船或港口,程序的表现只和集装箱有关系(容器),和集装箱放在哪个货船或者哪个港口(操作系统)没有关系。
此外docker的另一个好处就是快速部署,这是当前互联网公司最常见的一个应用场景,一个原因在于容器启动速度非常快,另一个原因在于只要确保一个容器中的程序正确运行,那么你就能确信无论在生产环境部署多少都能正确运行。
2.在linux系统中快速安装docker
提示:在安装docker之前请先保证连接的是root账号
1.使用 root 权限登录 Centos。确保 yum 包更新到最新
yum update
2.旧版本的 Docker 称为 docker 或者 docker-engine,使用以下命令卸载旧版本:
yum remove docker docker-common docker-selinux docker-engine
3.在网络良好的环境下执行这段话(这是我常用的方式,一句话即可安装)
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
4.更新完成后启动docker和设置自动启动
systemctl start docker.service 启动docker服务
systemctl enable docker.service 设置开启虚拟机时自动启动docker服务
5.设置阿里云加速地址
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json
{
"registry-mirrors": ["https://1sbmxpab.mirror.aliyuncs.com"]
}
EOF
**6.重新加载 systemd 的配置文件后重启 Docker 服务 **
sudo systemctl daemon-reload 重新加载 systemd 的配置文件
sudo systemctl restart docker 重启 Docker 服务
3.到这一步我们可以使用以下命令来检验我们是否成功安装docker
1.运行一个简单的 Docker 命令:
sudo docker run hello-world
这条命令会下载并运行一个名为hello-world 的 Docker 镜像。
它将打印一条欢迎消息和一些其他信息。如果一切正常,你将看到类似于以下输出:
[root@localhost /]# sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:2498fce14358aa50ead0cc6c19990fc6ff866ce72aeb5546e1d59caac3d0d60f
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
..................................
For more examples and ideas, visit:
https://docs.docker.com/get-started/
2. 查看docker的版
sudo docker version
3.查看正在运行的容器和停止的容器
sudo docker ps -a
4.查看所有镜像
sudo docker images
4.在来docker容器中配置环境
1.安装mysql
docker run --name mysqlt161 --restart=always -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
--name mysqlt161:为容器指定一个自定义名称为 mysqlt161,方便后续管理和操作。不设置则随机生成
--restart=always: 设置在容器启动时自动重启。
-p 3306:3306: 将容器内的 3306 端口映射到宿主机的 3306 端口,这样可以通过宿主机的 IP 地址和端口来访问 MySQL 服务。
RD-e MYSQL_ROOT_PASSWO=root: 设置 MySQL 的 root 用户的密码为 root,这里可以替换为你想要的密码。
-d mysql:5.7: 指定使用的镜像为 MySQL 5.7 版本,并在后台以守护进程方式运行。 可以自行更改版本和自定环境
可以根据此规则自定义
2.安装redis
docker run --name redist161 --restart=always -p 6379:6379 -d redis:4.0.0
3.安装tomcat
docker run --name tomcatt161 --restart=always -p 8080:8080 -d tomcat:7.0.57
4.安装mongodb
docker run --name mongo --restart=always -p 27017:27017 -d mongo --auth
5.安装完成后使用
查看正在运行的容器和停止的容器
sudo docker ps -a
查看所有镜像
sudo docker images
6.这里尽量开放一下服务器的端口查看防火墙状态: 不要都关了
开关防火墙:
systemctl status firewalld 查看防火墙服务的状态
systemctl stop firewalld 停止防火墙服务
systemctl start firewalld 启动防火墙服务
firewall-cmd --reload 重启防火墙
开启端口:
开放3306端口:
firewall-cmd --zone=public --add-port=3306/tcp --permanent
查询端口号8080是否开启:
firewall-cmd --query-port=3306/tcp
查询有哪些端口是开启的:
firewall-cmd --list-port
开放以下端口:
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --zone=public --add-port=6379/tcp --permanent
firewall-cmd --zone=public --add-port=8848/tcp --permanent
firewall-cmd --zone=public --add-port=9000/tcp --permanent
firewall-cmd --zone=public --add-port=6379/tcp --permanent
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=8888/tcp --permanent
firewall-cmd --zone=public --add-port=8081/tcp --permanent
firewall-cmd --zone=public --add-port=3339/tcp --permanent
firewall-cmd --zone=public --add-port=3340/tcp --permanent
firewall-cmd --zone=public --add-port=3341/tcp --permanent
firewall-cmd --zone=public --add-port=3342/tcp --permanent
firewall-cmd --zone=public --add-port=3343/tcp --permanent
firewall-cmd --zone=public --add-port=8066/tcp --permanent
firewall-cmd --zone=public --add-port=9066/tcp --permanent
到此我们可以去使用ifconfig显示和配置网络接口的命令 拿到ip地址
这时我们就可以去连接mysql,redis了,也可以在虚拟机上的浏览器中输入 IP地址:8080 进入tomcat官网
7.docker常用命令
container_id:容器ID
container_name:容器名称
容器相关命令:
- docker ps:列出正在运行的容器。> - docker run [image_name]:根据指定的镜像创建并运行一个容器。> - docker start [container_id/container_name]:启动一个已经创建的容器。> - docker stop [container_id/container_name]:停止一个正在运行的容器。> - docker restart [container_id/container_name]:重启一个容器。> - docker rm [container_id/container_name]:删除一个容器。> - docker rm -f [container_id/container_name]:强制删除一个容器。> - docker exec -it [container_id/container_name] [command]:在正在运行的容器中执行命令。> - docker rm -f $(docker ps -qa) : 删除所有容器
版权归原作者 JiuMen3520 所有, 如有侵权,请联系我们删除。