Docker简介
在理解docker之前,先来理解一下容器这个概念。我们这里所说的容器就是装代码或者软件的工具。在docker未诞生之前同一套代码会经过开发、测试、运维部署这三套大的流程,这么做会有一个缺点:同样的代码在我这里运行没问题,怎么在你那里就有错了呢?这个原因可以归结为两者之间的运行环境不同。为了解决这个问题google公司使用go语言开发了docker。
Docker组件
- Docker是一个客户端-服务器(C/S)架构程序。客户端只需要向服务端,服务器或者守护进程将完成所有工作并返回结果。
- Docker镜像,镜像是构建docker的基石,也是容器的“源代码”,镜像体积小易于分享、存储、和更新。
- 注册中心(Registry),Docker用注册中心来保存镜像,可以理解为maven的中央仓库。
- Docker容器,Docker可以帮助你构建和部署容器,你只需要把自己的应用程序或者服务打包放进容器即可。容器是基于镜像启动起来的,容器可以运行一个或多个进程。一旦容器启动完成后,我们就可以登录到容器中安装自己需要的软件或者服务。
Docker安装与启动
所处环境Centos7
:
1. 安装: yum install docker -y
,安装之后通过docker -v
查看docker版本号
2. 启动:systemctl start docker
3. 停止:systemctl stop docker
4. 重启:systemctl restart docker
5. 查看状态:systemctl status docker
6. 开机启动:systemctl enable docker
上图表示docker已启动
Docker镜像操作
Docker镜像是由文件系统叠加而成(是一种文件的存储形式)。最低端是一个文件引导系统,即bootfs,这很像典型的Linux/Unix的引导文件系统。当一个容器启动后,它将会被移动到内存中,而引导文件系统则会被卸载,以流出更多的内存供磁盘镜像使用。Docker容器启动是需要一些文件的,而这些文件就可以称为Docker镜像。下面介绍镜像相关指令:
1. 列出所有镜像:docker images
- REPOSITORY:镜像所在的仓库名称
- TAG:镜像标签
- IMAGE ID:镜像 ID
- CREATED:镜像的创建日期(不是获取该镜像的日期)
- SIZE:镜像大小
为了区分同一仓库下的不同镜像,Docker提供了一种能称为标签的功能(Tag)。这种机制使得同一仓库中可以存储多个版本镜像。
2.搜索镜像:docker search 镜像名称
- NAME:仓库名称
- DESCRIPTION:镜像描述
- STARS:用户评价,反应一个镜像的受欢迎程度
- OFFICIAL:是否官方
3.拉取镜像:docker pull 镜像名称
4.删除镜像:docker rmi 镜像ID
Docker容器操作
查看容器
- 查看正在运行的容器:
docker ps
- 查看所有的容器(启动过的历史容器):
docker ps -a
创建与启动容器
创建容器常用的参数说明:
- 创建容器命令:
docker run
- -i:表示运行容器
- -t:表示容器启动后会进入命令行,加上这个参数后,容器创建就能登陆进去。即分配了一个伪终端。
--name
:为创建的容器命名- -v:表示目录映射关系(前者是宿主机目录,后者是容器中的目录)
- -d:创建一个守护式容器在后台运行
- -p:端口映射,前者是宿主机端口,后者是容器内端口
1.交互式容器:docker run -it --name=mycentos centos:7 /bin/bash
,该类型容器退出容器之后容器就停止。
2.守护式容器:docker run -di --name=mycentos2 centos:7
,登录守护式容器docker exec -it container_name /bin/bash
,退出容器后不会停止容器
停止与启动容器
- 停止正在运行的容器:
docker stop $CONTAINER_NAME/ID
- 启动已运行过的容器:
docker start $CONTAINER_NAME/ID
文件拷贝
将宿主机的文件拷贝到容器内:docker cp 需要拷贝的文件或者目录 容器名称:容器目录
将文件从容器拷贝到宿主机:docker cp 容器名称:容器目录 需要拷贝的文件或者目录
目录挂载
我们可以在创建容器的时候,将宿主机与容器内的目录进行映射,这样就可以通过修改宿主机某个目录文件从而去影响容器。
语法:docker run -di -v 宿主机目录:容器目录 --name=容器名 镜像名:标签 --privileged=true
查看容器IP地址
docker inspect 容器名
,之后会有IPAddress
这个key就是容器的IP
删除容器
docker rm $CONTAINER_ID/NAME
部署应用
MySql部署
- 拉取镜像:
docker pull mysql
- 查看镜像:
docker images
- 创建mysql容器:
docker run -di --name 容器名 -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
,33306为宿主机端口映射为容器内端口3306,也可以将宿主机的3306端口映射给容器的3306端口,mysql密码为123456 - 进入mysql容器,登陆mysql:
docker exec -it my_mysql /bin/bash
,登陆mysqlmysql -u root -p
密码为:123456 - 远程登陆mysql,直接连接宿主机的ip及端口(33306)
Tomcat部署
- 拉取镜像:
docker pull tomcat
- 查看镜像:
docker images
- 创建tomcat容器:
docker run -di --name=my_tomcat -p 9000:8080
,之后直接访问宿主机的9000端口即可。
-v /usr/local/myhtml:/usr/local/tomcat/webapps --privileged=true tomcat:7-jre7
Nginx部署
- 拉取镜像:
docker pull nginx
- 创建 Nginx 容器:
docker run -di --name=pinyougou_nginx -p 80:80 nginx/
- 测试:在浏览器地址栏输入宿主机IP即可
Redis部署
- 拉取镜像:
docker pull redis
- 创建 Nginx 容器:
docker run -di --name=my_redis -p 6379:6379 redis
- 测试:打开本机的redis目录,在命令行输入:
redis-cli -h 宿主机IP