Docker安装及在Docker中安装软件

Docker安装及在Docker中安装软件,第1张

Docker安装及在Docker中安装软件

Docker与系统之间的关系

安装Docker

Docker 运行在 CentOS 7 上,要求系统为64位、系统内核版本为 3.10 以上。

Docker 运行在 CentOS-6.5 或更高的版本的 CentOS 上,要求系统为64位、系统内核版本为 2.6.32-431 或者更高版本。

查看内核版本

uname -r	

CentOS发现版本

cat /etc/centos-release

拉取镜像:

docker pull 镜像名称

删除指定镜像:

docker rmi $IMAGE_ID

删除所有镜像:

docker rmi `docker images -q`

卸载老版本

yum remove docker 
docker-client 
docker-client-latest 
docker-common 
docker-latest 
docker-latest-logrotate 
docker-logrotate 
docker-engine

阿里云镜像安装
安装步骤

配置docker镜像加速:将下面的命令一步一步复制粘贴就可以了

镜像加速地址

docker的简单命令
启动docker:		systemctl start docker
停止docker:		systemctl stop docker
重启docker:		systemctl restart docker
查看docker状态:	systemctl status docker
开机启动:		systemctl enable docker

查看docker的容器的常见命令

查看正在运行容器:
	docker ps

查看所有的容器(启动过的历史容器):
	docker ps –a

查看最后一次运行的容器:
	docker ps –l

查看停止的容器:
	docker ps -f status=exited
	
删除容器:
docker rm 容器名称

启动docker ,就安装完成了,然后就可以在docker中安装一些软件

创建容器常用的参数说明 具体作用- i表示运行容器- t表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。- - name为创建的容器命名。-d在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)-v表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。-p表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射

交互式启动(前台启动)
特定:容器启动进入容器内部,exit退出时,容器停止

创建一个交互式容器并取名为mycentos1

docker run -it --name=容器名 镜像名:版本号 /bin/bash
docker run -it --name=mycentos1 centos:7 /bin/bash

守护式容器(后台启动)
特定:容器启动不会直接进入容器内部。exit退出时,容器不会停止

创建一个守护式容器:如果对于一个需要长期运行的容器来说,我们可以创建一个守护式容器。

docker run -id --name=mycentos2 centos

登录守护式容器方式:

docker exec -it container_name (或者 container_id)  /bin/bash(exit退出时,容器不会停止)

停止正在运行的容器:

docker stop $CONTAINER_NAME/ID

启动已运行过的容器:

docker start $CONTAINER_NAME/ID

文件拷贝
如果我们需要将文件拷贝到容器内可以使用cp命令
docker cp 需要拷贝的文件或目录 容器名称:容器目录

也可以将文件从容器内拷贝出来
docker cp 容器名称:容器目录 需要拷贝的文件或目录

不能在两个容器之间直接拷贝

目录挂载:
我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器。

创建容器 添加-v参数 后边为 宿主机目录:容器目录

docker run -id -v /usr/local/myhtml:/usr/local/myhtml --privileged=true --name=mycentos3 centos

这是因为CentOS7中的安全模块selinux把权限禁掉了,我们需要添加参数 --privileged=true 来解决挂载的目录没有权限的问题

注意:挂载成功以后是双向影响,创建容器指定目录挂载是单向覆盖:宿主机的目录覆盖容器的目录(不要覆盖有功能的目录,容器创建启动有问题)

查看容器IP地址
我们可以通过以下命令查看容器运行的各种数据

docker inspect mycentos2

也可以直接执行下面的命令直接输出IP地址

docker inspect --format='{{.NetworkSettings.IPAddress}}' mycentos2
在Docker中安装Mysql

安装mysql

docker run -id --name=mysql55 -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123 mysql:5.5

启动容器

docker start mysql55(容器名字)

进入容器

docker exec -it mysql55(容器名字) /bin/bash

登录数据库

root@000827395d57:/# mysql -uroot -p123

我们发现编码乱码,修改配置文件改变乱码格式

show variables like '%char%';


因为容器中没有vim命令,所以先将容器里面的配置文件cp出来,mysql55是我的名字

[root@localhost /]# docker cp mysql55:/etc/mysql/my.cnf my.cnf 

然后修改

[client]
default-character-set=utf8
[mysqld]
character_set_server=utf8

然后改完了在cp回去

[root@localhost /]# docker cp my.cnf mysql55:/etc/mysql/

重启mysql容器

docker restart mysql55


查看编码,发现是utf-8 即完成

在Docker中安装Tomcat

下载镜像

[root@localhost /]# docker pull tomcat:9-jdk8

创建容器:这里用宿主机的9090端口去映射容器的8080端口

docker run -id --name=tomcat9 -p 9090:8080 tomcat:9-jdk8


打开9090端口

firewall-cmd --zone=public --add-port=9090/tcp --permanent

重启防火墙

firewall-cmd --reload

现在我们访问还是看不到猫,因为在docker下的webapps中没有界面,docker中的访问界面在webapps.dist这个文件夹的ROOT文件夹中,所以我们要将这个ROOT文件复制过去。

cp -r webapps.dist/ROOT webapps/

然后就可以访问到猫了

到这里我们就把tomcat装完了

在Docker中安装Nginx

开始用的是-v映射去安装但是报下面的错误,原因可以看这篇文章

docker run -id --name=nginx -p 90:80 -v /mydata/nginx.conf/:/etc/nginx/nginx.conf  nginx


所以我们先不-v映射

docker run -id --name=nginx -p 90:80 nginx

在这里访问90

反向代理

我们可以先去看nginx.conf这个文件

cat etc/nginx/nginx.conf

可以发现没有server

这是因为docker中的nginx是在这个路径下

cat etc/nginx/conf.d/default.conf

我们可以将它的server中内容复制出来,可以直接复制到nginx.conf中也可以直接在default.conf中更改

server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;

    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
}

将nginx.conf配置文件cp出来然后更改

[root@localhost mydata]# docker cp nginx:/etc/nginx/nginx.conf nginx.conf

我们准备一个接口做准备

都在http标签内(坑我半天)

upstream myweb{
    server 192.168.195.157:9090;
}

server {
     listen       80;
     listen  [::]:80;
     server_name  localhost;

	 #access_log  /var/log/nginx/host.access.log  main;
	
	 location / {
	      proxy_pass http://myweb/;
	 }
}

改好cp回去

docker cp nginx.conf nginx:/etc/nginx/nginx.conf

打开防火墙

firewall-cmd --zone=public --add-port=90/tcp --permanent

重启防火墙

firewall-cmd --reload

访问90即完成

场景:
运行了nginx,一开始只映射了80端口,后面载部署项目的时候,需要用到其他端口,不想重新部署容器,所以通过修改配置文件的方式给容器添加其他端口
当然。添加端口的方法是通用的,除此以外的方法比如将容器打包成镜像,再运行一个容器,或者干脆放弃当前容器,重新运行一个容器是完全不在我考虑范围内的

处理以上情况我们可以看这篇文章

负载均衡

将我们事先准备好的war包复制到linux中

然后在通过命令赋值到tomcat对应的容器中(我们这里有两个容器,复制好一个在改index中的内容),两个tomcat服务器必须用同一个war包或者jar包名字一致,内容可以不一致(我们这里就是内容不一致,因为需要看效果)。

docker cp pager.war(war包名字) tomcat9:/usr/local/tomcat/webapps(路径)

然后更改nginx配置文件与端口对应,还是在http标签内

#include /etc/nginx/conf.d/*.conf;

upstream myweb{
    server 192.168.195.157:9090;
    server 192.168.195.157:9091;
}

server {
    listen       80;
     listen  [::]:80;
     server_name  localhost;

    #access_log  /var/log/nginx/host.access.log  main;

    location / {
            proxy_pass http://myweb/;
    }
}


因为我们有一个tomcat服务器对应的是9091端口,所以还需要打开9091端口,9090之前打开过

firewall-cmd --zone=public --add-port=9090/tcp --permanent

重启防火墙

firewall-cmd --reload

执行效果:

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5694854.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存