镜像就好像是iso文件,docker需要使用镜像作为源。一个镜像可以反复被使用,而每次当docker通过镜像启动起来的就是一个容器,容器之间相互隔离。如果容器被删除了,在容器中的所有改变都会丢失。
用一张最经典的图来表示镜像与容器的关系:
没错,一个完整的docker项目就应该是这样,在本地系统(boosfs)之上可能存在多个镜像(image)它们之间存在继承关系,而最上层处于运行环境的就是容器(container)。所有的修改操作都只在容器中。如果容器被关闭数据会发生丢失,除非你将容器刻录为新的镜像层。不过我们还有别的更好的手段将数据保存下来,但不在我们今天的讨论中。
5. 获取镜像:docker pull [image_name]
**********************************************
请确认你已经配置了国内的镜像加速:
vim /etc/docker/daemon.json
配置:
重启Docker:systermctl restart docker
**********************************************
先查询一下与CentOS有关的镜像
docker search centos
第一个看上去很“官方”的样子
docker pull centos:latest
下载完成以后先查询一下确认镜像没有问题docker images。
6. 交互的方式来启动镜像:docker run -it [image_name] [args...]
docker run -it centos /bin/bash
咦?似乎没有任何变化。再仔细看看,命令提示符是不是有变化。
没错,你已经进入了容器,现在是在容器的CentOS操作界面。7. 安装Mysql
$ sudo yum install -y wget
$ sudo wget
$ sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm
$ sudo yum install mysql-community-server
配置
$ sudo mysql_install_db --user=mysql --ldata=/var/lib/mysql
启动
$ sudo mysqld_safe
8. 离开容器:Ctrl + q, Ctrl + p
这个组合键是用来退出容器并让容器在后台保持运行
9. 重新登陆容器:docker exec -it [container_id] [args...]
docker exec -it 21f99e364fb1 bash
赋予MySQL的root用户远程连接权限
# mysql -u root
mysql> UPDATE mysql.user SET Password = PASSWORD('12345678') WHERE User = 'root';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '12345678' WITH GRANT OPTION;
mysql> flush privileges;
10. 提交镜像:docker commit [container_id] [myimage_name:tag]
要提交自己的镜像首先需要退出当前容器:
exit
docker commit 21f99e364fb1 centos:mysql
11. 端口映射:docker run -p [local_port]:[docker_port] -it [image_name] [args...]
docker run -p 3307:3306 -it centos:mysql /bin/bash
这样我们在本地的操作系统中就可以通过访问虚拟机的3307端口访问我们在docker中部署的mysql服务了。
三、构建SpringBoot项目的docker镜像
到目前为止,如果你的操作一切顺利代表已经掌握了docker的基本使用方法。上面的对于mysql的安装其实只是起到一个抛砖引玉的作用,目的是让你熟悉docker的基础命令,实际在开发中我们很少会将mysql部署在docker中。更常见的一个开发场景是将SpringBoot项目生成docker镜像,下面我们就正式进入实战环节。
1. 在本地先构建一个SpringBoot项目
通过SpringBoot的官网为我们生成一个基础项目:
接着通过你喜欢的IDE导入并打开项目,在pom.xml文件中添加依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<dockerDirectory>src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
编写一个controller文件: