自己开发Docker镜像
我们可以自己开发一个镜像,并将该镜像上传到远程服务器上,供他人进行下载使用
Docker主张每个镜像包含一个服务,但也可以通过开发一个镜像包含多种服务来形成LAMP环境
配置容器
通过镜像产生一个容器:
docker run -tid -p 8080:80 -p 3309:3306 -v /www:/var/www/html --name web ubuntu /bin/bash其中:
-tid表示在后台运行-p 8080:80表示指定一个端口,将本地的8080端口映射到容器里面的80端口(通过localhost访问8080端口时,可以访问到容器内部的80端口)-p 3309:3306表示在本地通过命令行或者MySQL连接工具需要连接到MySQL时,通过本地的3309可以连接到3306-v /www:/var/www/html表示挂载点,将本地的www挂载映射到远程容器中的html中,这样在本地添加的代码会自动放到容器中(因为我们最终运行的环境是在远程的容器中)--name表示给容器起一个名字,上式起名为webubuntu表示镜像名/bin/bash表示我们要登录的share
查看是否产生正在运行的容器:
docker ps进入到容器当中:
docker exec -ti web /bin/bash更新容器中的镜像源和软件:
apt update更新软件(将容器内部的软件升级到最新版):
apt upgrade安装相关做镜像的软件:(该docker容器包括
nginx,php,mysql和vim)apt install -y nginx php-fpm mysql-client mysql-sever vim其中-y表示强制安装过程中会让你选择一个时区,选择对应的地区和时区即可
在容器中配置
nginx和php的连接:修改
php中的配置文件:vim /etc/php/7.2/fpm/pool.d/www.conf搜索文件中的连接方式,可以通过ip地址连接,可以通过socket进行连接,我们需要复制文件中的/run/php/php7.2-fpm.sock,之后不保存退出q!修改
nginx中的配置文件:vim /etc/nginx/sites-enabled/default修改为以下的内容:其中将
php配置文件复制的内容放到这里
启动脚本,可以先看一下
ls /etc/init.d/位置下的脚本文件启动php:
service php7.2-fpm start启动nginx:
service nginx start启动完后就可以在浏览器中进行访问:
localhost:8080
在容器中进入到
var/www/html路径下:cd /var/www/html- 将
abc推送到hd.html中:echo 'abc'>hd.html ls发现路径下多了一个hd.html文件- 在网页中访问:
localhost:8080/hd.html,就会看到网页中出现的abc
- 将
初始化容器中的
MySQL启动
MySQL:server mysql start进行
MySQL的初始设置:mysql_secure_installation输入y表示设置密码强度的插件;输入0表示设置密码的低复杂度
输入新密码,重复新密码,输入y表示使用密码保护,输入y表示移除匿名账号
输入y表示可以使用远程登陆,后续一路输入y即可
对
MySQL进行配置在
/var/www/html路径下,打开MySQL的配置文件:vim /etc/mysql/mysql.conf.d/mysqld.cnf将
bind-address=127.0.0.1这一行进行注释,使我们可以通过外部的IP进行连接设置允许外部连接的一个登陆账号:
mysql -uroot -p输入密码set global validate_password_policy=LOW;grant all privileges on *.* to 'root'@'%' identified by 'admin888';- 重新加载授权表:
FLUSH PRIVILEGES - 退出mysql:
exit - 正常启动
MySQL: usermod -d /var/lib/mysql/ mysqlchown -R mysql:mysql /var/lib/mysql
将配置好的容器生成镜像
我们最终需要将镜像推送到远程,我们一般通过容器来生成镜像
我们需要退回到系统环境,而不是在容器环境中配置
提交:
docker commit -m="first commit" -a="jlc" web web:v1-m="first commit"表示提交信息-a="jlc"表示作者web表示提交容器web:v1表示生成的版本号,在版本好前加上docker官网的账号用户名,表示向远程推送,如jlc/web:v1,如果不加用户名是没有办法推送到远程的,不加v1,会默认生成latest的版本
查看生成出的镜像:
docker images
镜像的标签操作
通过docker images,我们可以看到我们拥有的镜像,其中TAG表示镜像的标签,latest表示最新的标签
如果我们想要更改标签,可以通过docker tag 镜像ID 新的镜像名字,会生成同一个镜像的不同的版本,如果删除这个镜像,其所有的版本都不再存在
如果想要只删除一个版本,可以通过指定版本号进行删除:docker rmi -f jlc/web:v1,这样该镜像的另外版本是不受影响的