一、Docker简介
二、Docker安装与启动
1、安装docker环境说明
Docker官方建议在Ubuntu中安装,因为Docker是基于Ubuntu发布的,而且一般Docker出现的问题Ubuntu是最先更新或者打补丁的。在很多版本的CentOS中是不支持更新最新的一些补丁包的。
由于我们学习的环境都使用的是CentOS,因此这里我们将Docker安装到CentOS上。注意:这里建议安装在CentOS7.x以上的版本,在CentOS6.x的版本中,安装前需要安装其他很多的环境而且Docker很多补丁不支持更新。
2、使用centos7进行docker环境安装
3、启动docker服务
systemctl命令是系统服务管理器指令,它是 service 和 chkconfig 两个命令组合。
启动docker:systemctl start docker
停止docker:systemctl stop docker
重启docker:systemctl restart docker
查看docker状态:systemctl status docker
开机启动:systemctl enable docker
查看docker概要信息:docker info
查看docker帮助文档:docker --help
三、Docker镜像操作
1、什么是docker镜像
Docker镜像是由文件系统叠加而成(是一种文件的存储形式)。最底端是一个文件引导系统,即bootfs,这很像典型的Linux/Unix的引导文件系统。Docker用户几乎永远不会和引导系统有什么交互。实际上,当一个容器启动后,它将会被移动到内存中,而引导文件系统则会被卸载,以留出更多的内存供磁盘镜像使用。Docker容器启动是需要的一些文件,而这些文件就可以称为Docker镜像。
2、列出docker下所有镜像
REPOSITORY:镜像所在的仓库名称
TAG:镜像标签
IMAGE ID:镜像ID
CREATED:镜像的创建日期(不是获取该镜像的日期)
SIZE:镜像大小
这些镜像都是存储在Docker宿主机的/var/lib/docker目录下
3、拉取镜像
国情的原因,国内下载 Docker HUB 官方的相关镜像比较慢,可以使用国内(docker.io)的一些镜像加速器,镜像保持和官方一致,关键是速度块,推荐使用。Mirror与Private Registry的区别:
Private Registry(私有仓库)是开发者或者企业自建的镜像存储库,通常用来保存企业内部的 Docker 镜像,用于内部开发流程和产品的发布、版本控制。
Mirror是一种代理中转服务,我们(比如daocloud)提供的Mirror服务,直接对接Docker Hub的官方Registry。Docker Hub 上有数以十万计的各类 Docker 镜像。
在使用Private Registry时,需要在Docker Pull 或Dockerfile中直接键入Private Registry 的地址,通常这样会导致与 Private Registry 的绑定,缺乏灵活性。
使用 Mirror 服务,只需要在 Docker 守护进程(Daemon)的配置文件中加入 Mirror 参数,即可在全局范围内透明的访问官方的 Docker Hub,避免了对 Dockerfile 镜像引用来源的修改。
简单来说,Mirror类似CDN,本质是官方的cache;Private Registry类似私服,跟官方没什么关系。对用户来说,由于用户是要拖docker hub上的image,对应的是Mirror。yum/apt-get的Mirror又有点不一样,它其实是把官方的库文件整个拖到自己的服务器上做镜像,并定时与官方做同步;而Docker Mirror只会缓存曾经使用过的image。
使用命令拉取:
docker pull centos:7
目前国内访问docker hub速度上有点尴尬,使用docker Mirror势在必行。现有国内提供docker镜像加速服务的商家有不少,下面重点ustc镜像。
4、配置使用ustc的镜像加速器
(1)、编辑文件/etc/docker/daemon.json(如不存在,手动创建)
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
(2)、重启docker服务
5、搜索镜像
如果你需要从网络中查找需要的镜像,可以通过以下命令搜索
docker search 镜像名称
NAME:仓库名称
DESCRIPTION:镜像描述
STARS:用户评价,反应一个镜像的受欢迎程度
OFFICIAL:是否官方
AUTOMATED:自动构建,表示该镜像由Docker Hub自动构建流程创建的
6、删除镜像
docker rmi $IMAGE_ID:删除指定镜像
docker rmi `docker images -q`:删除所有镜像
四、Docker容器操作 -- mysql
1、创建容器
创建容器命令:docker run
创建容器常用的参数说明:
-i:表示运行容器
-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
--name :为创建的容器命名。
-v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
2、创建并启动守护式容器
如果对于一个需要长期运行的容器来说,我们可以创建一个守护式容器。命令如下(以mysql举例,容器名称不能重复):
[root@localhost docker]# docker run -di --name=pinyougou_mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
3、重启已经创建的容器
以刚创建的mysql容器为例,当虚拟机重新启动后,mysql容器并不会伴随着启动docker而被启动,因此,需要手动启动mysql容器
启动命令:docker start 容器ID(或者容器名称)
4、windows中使用工具连接mysql容器
对于部分工具可能无法远程连接,需要先在Linux中的mysql容器中执行如下操作:
进入docker容器:
docker exec -it pinyougou_mysql /bin/bash
登录mysql,设置远程访问权限:
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
Query OK, 0 rows affected (0.51 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)
5、关闭容器和删除容器
说明:删除容器之前需要关闭容器删除容器
[root@localhost ~]# docker stop pinyougou_mysql
pinyougou_mysql
[root@localhost ~]# docker rm pinyougou_mysql
六、Docker容器操作 -- tomcat
1、拉取tomcat镜像
2、守护式创建tomcat映射容器
问题:创建tomcat容器的时候,可能会抛出 WARNING: IPv4 forwarding is disabled. Networking will not work 这样的问题,此时需要按照上图步骤进行:
(1)、编辑配置文件
vi /usr/lib/sysctl.d/00-system.conf
(2)、加入配置
net.ipv4.ip_forward=1
(3)、重启网络
systemctl restart network
(4)、停止、删除tomcat容器,并重新创建守护式容器
docker stop pinyougou_tomcat
docker rm pinyougou_tomcat
docker run -di --name=pinyougou_tomcat -p9000:8080 tomcat
3、向tomcat容器中部署项目
七、Docker容器操作 -- nginx
1、拉取镜像
docker pull redis
2、创建守护式nginx容器
docker run -di --name=pinyougou_nginx -p 80:80 nginx
3、修改nginx配置文件nginx.conf
(1)、将docker容器中的nginx配置文件拷贝到linux中进行修改
说明:nginx默认安装到/etc/nginx目录下
docker cp pinyougou_nginx:/etc/nginx/nginx.conf nginx.conf
(2)、修改配置文件
配置nginx的发现代理,参考nginx学习笔记
说明:nginx反向代理tomcat时,配置的地址为tomcat容器的ip地址和端口号,不是虚拟机的ip地址和对外映射的端口号,查看tomcat容器的ip地址命令如下:
docker inspect pinyougou_tomcat
(3)、将nginx.conf配置文件重新拷贝到nginx目录下
docker cp nginx.conf pinyougou_nginx:/etc/nginx/nginx.conf
(4)、重启nginx容器
docker restart pinyougou_nginx
八、Docker容器操作 -- redis
1、拉取镜像
docker pull redis
2、创建守护式容器
[root@localhost local]# docker run -di --name=pinyougou_redis -p 6379:6379 redis
f3de9c3f5af3246cb8f93ac94b8332532a2445e6cfe65f16956a77501e06416e
九、docker容器的备份与迁移
1、迁移容器之前需要将容器还原保存成镜像
还原语法:docker commit 容器名称 保存的镜像名称
2、将容器镜像进行备份
备份语法:docker save -o 备份后的名字 要备份的镜像
3、迁移容器
将备份的镜像文件拷贝到/root下,进行镜像加载
加载语法:docker load -i 镜像名称