镜像的生成途径
1、基于容器制作
2、dockerfile,docker bulid
基于容器制作镜像
docker commit
格式:
Usage: docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
Options 参数
-a,作者
-c,修改Dockerfile指令应用于创建的镜像
-m,提交消息
-p,在提交期间暂停容器(默认为true)
例
启动docker服务
[root@KVM02 ~]# systemctl daemon-reload
[root@KVM02 ~]# systemctl restart docker
运行容器
[root@KVM02 ~]# docker run -it --name b1 busybox /bin/sh
/ # mkdir /data/html
/ # ls /data/
html
/ # echo xx > /data/html/index.html
/ # cat /data/html/index.html
xx
将当前的容器制作成镜像
[root@KVM02 ~]# docker commit -a 'xx01<[email protected]>' -m 'first commit' b1 xx01/httpd:v1
查看制作的镜像
[root@KVM02 ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
xx01/httpd v1 b5fced4e80ff 7 seconds ago 1.23MB
基于新的镜像运行一个容器,验证是否是基于b1创建成功的
[root@KVM02 ~]# docker run --rm -it xx01/httpd:v1 /bin/sh
/ # cat /data/html/index.html
xx
基于容器b1创建新的镜像,并修改执行命令CMD
[root@KVM02 ~]# docker commit -a 'xx01<[email protected]>' -m 'first commit' -c 'CMD ["/bin/httpd","-f","-h","/data/html"]' b1 xx01/httpd:v2
注解:busybox 中httpd 语法
-f:不运行为守护进程,在前台运行
-h:指定httpd运行的主目录
[root@KVM02 ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
xx01/httpd v2 d87e2bf8788c 4 seconds ago 1.23MB
将宿主机的端口与容器的80端口进行映射,实现外部访问容器的信息
[root@KVM02 ~]# docker run -d --name b2 -p 8888:80 xx01/httpd:v2
访问成果
[root@KVM02 ~]# curl 192.168.16.44:8888
xx
Ubuntu添加openssh服务制作镜像
1、运行Ubuntu原有镜像
[root@KVM02 ~]# docker run -it --name b1 ubuntu:16.04 /bin/sh
# apt-get update #对 apt-get进行更新
#apt-get install openssh-server #下载openssh服务软件
# /etc/init.d/ssh start #启动服务
* Starting OpenBSD Secure Shell server sshd [ OK ]
基于centos:6制作含有lamp的镜像
[root@KVM02 ~]# docker run -it --name centos6 centos:6 /bin/bash
[root@bac4960e9730 /]# yum install httpd mysql php php-mysql php-gd -y
[root@KVM02 ~]# docker commit centos6 xx01/centos_lamp:v1
[root@KVM02 ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
xx01/centos_lamp v1 709b03333c73 About a minute ago 405MB
[root@KVM02 ~]# docker run --name centos_lamp -v /tools:/tmp -d xx01/centos_lamp:v1
基于wordpress包制作一个镜像,创建一个网站
运行容器
[root@KVM02 ~]# docker run --name wordpress -v /tools:/opt/ -it -p 8800:80 xx01/centos_lamp:v1
宿主机上安装wordpress包
[root@KVM02 ~]# yum install wordpress
将下载的wordpress包cp到与容器关联的目录中
[root@KVM02 ~]# cp -r /usr/share/wordpress/ /tools
进入容器启动相应的服务
[root@9178467a68ff /]# yum install mysql-server
[root@a36593bb3772 /]# /etc/init.d/mysqld start
Starting mysqld: [ OK ]
[root@46e86ddab246 /]# service httpd start
开机自启动
[root@46e86ddab246 /]# chkconfig mysqld on
[root@46e86ddab246 /]# chkconfig httpd on
将容器与宿主机关联的目录下的wordpress cp到/var/www/html目录下
[root@a36593bb3772 /]# cp -r /opt/wordpress /var/www/html/
[root@a36593bb3772 /]# ls /var/www/html/
wordpress
进入数据库,初始化数据
[root@46e86ddab246 /]# mysql
mysql> create database wordpress character set utf8;
Query OK, 1 row affected (0.00 sec)
mysql> grant all on wordpress.* to wordpress@localhost identified by '123456';
Query OK, 0 rows affected (0.00 sec)
mysql>\q
进入到/var/www/html/wordpress/目录下编译we-config.php,可参考wp-config-sample.php文件
[root@a36593bb3772 /]#cd /var/www/html/wordpress/
[root@46e86ddab246 wordpress]# cp wp-config-sample.php wp-config.text
[root@46e86ddab246 wordpress]# vi wp-config.php
启动http服务
[root@46e86ddab246 wordpress]# /etc/init.d/httpd restart
Stopping httpd: [ OK ]
Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2 for ServerName
[ OK ]
将当前的容器制作成新的镜像
[root@KVM02 tools]# docker commit wordpress wordpress:v1
[root@KVM02 tools]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
wordpress v1 11cbb81265fc 18 seconds ago 602MB
基于新的镜像启容器并开启相应的服务
[root@KVM02 ~]# docker run -it --name wordpress -p 8000:80 wordpress:v1 /bin/bash
[root@29e39d32553b /]# service httpd start
Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2 for ServerName
[ OK ]
[root@29e39d32553b /]# service mysqld start
Starting mysqld: [ OK ]
wp-config.php 文件中修改的部分:
根据宿主机IP地址的8000端口进行访问:192.168.16.44:8000/wordpress
给镜像打标签
[root@KVM02 ~]# docker tag wordpress:v3 xxvv01/xx:wordpress
上传镜像
[root@KVM02 ~]# docker push xxvv01/xx:wordpress
使用link方式使容器间可以互相通信
1、docker run --link的作用
docker run --link 可以用来链接两个容器,使得容器之间可以相互通信,并且接收容器可以获取源容器的一些数据。如源容器的环境变量。
–link的格式:
–link :alias 其中,name和id是源容器的name和id,alias是源容器在link下的别名。
2. --link下容器间的通信
源容器和接收容器之间传递数据是通过以下2种方式:
(1)设置环境变量
(2)更新/etc/hosts文件
1> 设置环境变量
当使用--link时,docker会自动在接收容器内创建基于--link参数的环境变量:
docker会在接收容器中设置名为<alias>_NAME的环境变量,该环境变量的值为:
<alias>_NAME=/接收容器名/源容器alias
接收容器还会获取源容器暴露的环境变量,这些变量包括:
源容器Dockerfile中ENV标签设置的环境变量
源容器用docker run命令创建,命令中包含的 -e或--env或--env-file设置的环境变量
2> 更新/etc/hosts文件
docker会将源容器的hosts更新到目标容器的/etc/hosts中
使用mysql:5.6和wordpress镜像,构建网站。
[root@KVM02 ~]# docker pull mysql:5.6
[root@KVM02 ~]# docker run --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d --restart=always mysql:5.6
[root@KVM02 ~]# docker exec -it mysql /bin/sh
# mysql -uroot -p
Enter password:
[root@KVM02 ~]# docker pull wordpress
[root@KVM02 ~]# docker run --name wp -p 8000:80 --link mysql:mysql -d --restart=always wordpress
使用mysql:5.6和owncloud镜像,构建网盘。
[root@KVM02 ~]# docker pull mysql:5.6
[root@KVM02 ~]# docker run --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d --restart=always mysql:5.6
[root@KVM02 ~]# docker pull owncloud
[root@KVM02 ~]# docker run --name wp -p 80:80 --link mysql:mysql -d --restart=always owncloud