Docker的学习和使用——私有仓库配置与镜像构建

Docker的学习和使用——私有仓库配置与镜像构建

Scroll Down

Docker的学习和使用——私有仓库配置与镜像构建

主要包含了常见镜像的安装和配置,与自定义私有仓库的配置,项目镜像的构建。

1.常见镜像的安装

包括MySQL、Nginx、Redis等的安装

1.MySQL

1.拉取MySQL镜像

docker pull mysql

这个我拉起码10次才成功!!!

2.创建MySQL容器

docker run -di --name xp_mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
-p 代表端口映射,格式为  宿主机映射端口:容器运行端口
-e 代表添加环境变量  MYSQL_ROOT_PASSWORD是root用户的登陆密码

image.png

3.进入MySQL容器,登陆MySQL

进入mysql容器

docker exec -it xp_mysql /bin/bash

image.png
登陆mysql

mysql -u root -p

image.png

4.远程登陆MySQL

image.png
出现这个问题估计是因为mysql的版本加密方式不一样导致,验证失败

  1. 选择数据库mysql
mysql> use mysql
Database changed
mysql> select user,host,plugin,authentication_string from user;

image.png
2. 修改用户的ip与编码方式
我们是在远程连接所以修改root的ip

 ALTER USER 'root'@'%' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;
  1. 重新修改密码(相当于用新的加密方式编码)
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
  1. 刷新权限
FLUSH PRIVILEGES;

image.png
5.重连成功
image.png

2.Nginx

1.Nginx部署

docker pull nginx

2.创建Nginx容器

docker run -di --name=xp_nginx -p 80:80 nginx

image.png

3.测试Nginx

image.png

4配置反向代理

官方的nginx镜像,nginx配置文件nginx.conf 在/etc/nginx/目录下。
在容器内编辑配置文件不方便,我们可以先将配置文件从容器内拷贝到宿主机,编辑修改后再拷贝回去。

1.从容器拷贝配置文件到宿主机
docker cp xp_nginx:/etc/nginx/nginx.conf nginx.conf 
2.编辑nginx.conf,添加反向代理配置
upstream tomcat-cas {
	server 172.17.0.7:8080;
}
server {
	listen 80;
	server_name xp.com;
	location / {
		proxy_pass http://tomcat-cas;
		index index.html index.htm;
	}
}
3.将修改后的配置文件拷贝到容器
docker cp nginx.conf  xp_nginx:/etc/nginx/nginx.conf
4.重新启动容器
docker restart xp_nginx
5.设置域名指向
192.168.247.135 xp.com 
浏览器测试:http://xp.com/cas/login

3.Redis部署

1.拉取Redis镜像

注意要查看本机Redis是否启动 启动需要关闭

docker pull redis
2.创建Redis容器
docker run -di --name=xp_redis -p 6379:6379 redis

image.png

3.客户端测试

在你的本地电脑命令提示符下,用window版本redis测试

redis-cli -h ip

image.png

2.镜像的创建

镜像创建的原因:
1)备份
有时我们需要把正在运行的容器备份下来。
2)统一环境
开发人员开发出来就是可以使用镜像
测试人员运维人员直接使用镜像就ok
构建方式:
1)基于容器构建
2)dockerfile构建-脚本构建
3)maven插件构建-也是转换为dockerfile

1.基于容器构建

1.构建命令

docker commit mycentos xpcentos

2.使用新镜像启动新容器

docker run -di --name=mycentos1 xpcentos

image.png

2.Dockerfile构建

1.Dockerfile构建

image.png

2.基本命令

image.png

3.JDK1.8镜像制造

vi Dockerfile

FROM centos:7
MAINTAINER xp
WORKDIR /usr
RUN mkdir /usr/local/java
ADD jdk-8u191-linux-x64.tar.gz /usr/local/java
ENV JAVA_HOME /usr/local/java/jdk1.8.0_191
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/bin/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH

构建:

docker build -t="jdk1.8" .

image.png
运行:

docker run -di --name=jdk1.8 jdk1.8
docker exec -it jdk1.8 /bin/bash

image.png

3.maven插件构建

1.修改宿主机的docker配置,让其可以远程访问

image.png

vi /lib/systemd/system/docker.service
其中ExecStart=后添加配置 -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock 
systemctl daemon-reload 
systemctl restart docker 
docker start registry

image.png

2.防火墙对该端口放行

firewall-cmd --permanent --zone=public --add-port=2375/tcp 
systemctl restart firewalld

端口以及可以访问如下:
image.png

3.在工程pom.xml,添加依赖

<build>
        <!--镜像名称-->
        <finalName>jinlongeat-api</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <!--这里写上main方法所在类的路径-->
                <configuration>
                    <mainClass>life.xp.jinglongeat.ApplicationRunner</mainClass>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <!--docker的maven插件,官网: https://github.com/spotify/docker‐maven‐plugin-->
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>0.4.13</version>
                <configuration>
                    <!--私服地址-->
                    <imageName>192.168.10.129:5000/${project.artifactId}:${project.version}</imageName>
                    <baseImage>jdk1.8</baseImage>
                    <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}
                            </directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                    <!--宿主机开发端口-->
                    <dockerHost>http://192.168.10.129:2375</dockerHost>
                </configuration>
            </plugin>
        </plugins>
    </build>

4.构建镜像

image.png
image.png
image.png

5.进入宿主机 , 查看镜像

image.png

6.启动容器

docker run ‐di ‐‐name=jinglongeat ‐p 8088:8088 192.168.10.129:5000/jinglongeat-api: 1.0-SNAPSHOT 

3.私有仓库查搭建

1.下载私有仓库镜像

docker pull registry

2.启动私有仓库容器

docker run -di --name=registry -p 5000:5000 registry 

3.测试

image.png

4.让Docker信任私有仓库地址

修改vi /etc/docker/daemon.json
{
"insecure-registries": ["192.168.10.129:5000"]
}
image.png

4.重启docker

systemctl restart docker
docker info

image.png

5.上传镜像或拉取镜像到私有仓库

1.标记此镜像为私有仓库镜像

 docker tag jdk1.8 192.168.10.129:5000/jdk1.8

image.png

2.先要确保registry容器已经启动,上传镜像

docker start registry
docker push 192.168.10.129:5000/jdk1.8

image.png

3.查看私有镜像

image.png

4.拉取

其他docker下载镜像:同样设置需要设置仓库信任

  1. 也可删除本地镜像后重新pull
    注意如果同一个id有多个镜像可以使用名称删除
docker rmi 192.168.10.129:5000/jdk1.8

image.png
2.pull

docker pull 192.168.10.129:5000/jdk1.8

image.png
3.新镜像创建容器测试

docker run -di --name=new_jdk1.8 192.168.10.129:5000/jdk1.8

image.png

3.总结

docker的构建主要依赖镜像 我们可以公共镜像来构造一般的配置(如redis Nginx 消息队列),而我们自己写的服务需要单独打成镜像,进行容器的挂载。

祝君,好梦!