Docker之入门


一、初识Docker

1.1Docker的概念

  • Docker是一个开源的应用容器引擎
  • 诞生于2013年初,基于GO语言实现,dotCloud公司出品(后改名为Docker Inc)
  • Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上
  • 容器是完全使用沙箱机制,相互隔离
  • 容器性能开销极低
  • Docker从17.03版本后分为CE(Community Edition:社区版)和EE(Enterprise Edition:企业版)
    总结:Docker是一种容器技术,他解决容器环境迁移问题

1.2Docker的安装

Docker可以运行在MAC、Windows、CentOS、UBUNTU等操作系统上,本章基于CentOS 7 安装Docker。
官网:https://www.docker.com

# 1.yum包更新到最新
yum update
# 2.安装需要的软件包,yum-util提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
yum install -y yum-utils device-mapper-persistent-data lvm2
# 3.设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 4.安装Docker
yum install -y docker-ce
# 5.查看Docker版本,验证是否安装成功
docker -v

可以参考官网https://docs.docker.com/engine/install/centos/
镜像加速器
阿里云镜像获取地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors,登陆后,左侧菜单选中镜像加速器就可以看到你的专属地址了:
在/etc/docker/daemon.json,文件末尾增加如下内容

{
	"registry-mirrors": ["https://你的ID.mirror.aliyuncs.com"]
}

1.3Docker的架构

在这里插入图片描述

  • 镜像(Image)
    Docker镜像,就相当于是一个root文件系统。比如官方镜像ubuntu:16.04就包含了完整的一套Ubuntu16.04最小系统的root文件系统
  • 容器(Container)
    镜像和容器的关系,就像是面向对象程序设计中的类和对象一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等
  • 仓库(Repository)
    仓库可看成代码控制中心,用以保存镜像

二、Docker命令

2.1进程相关命令

启动docker服务

systemctl start docker

停止docker服务

systemctl stop docker

重启docker服务

systemctl restart docker

查看docker服务状态

systemctl status docker

设置开机启动docker服务

systemctl enable docker

2.2镜像相关命令

查看镜像:查看本地所有镜像

docker images
docker images -q	#查看所用镜像的id

搜索镜像:从网络中查找需要的镜像

docker search 镜像名称
docker search redis		#查找redis镜像

拉取镜像:从Docker仓库下载镜像到本地

docker pull 镜像名称
docker pull redis	#下载最新版本的redis
docker pull redis:5.0	#下载5.0版本的redis

删除镜像:删除本地镜像

docker rmi 镜像id	#删除指定本地镜像
docker images -q	#查看所有镜像列表
docker rmi `docker images -q`	#删除所有本地镜像

2.3容器相关命令

查看容器

docker ps	#查看正在运行的容器
docker ps -a	#查看所有容器
docker ps -as 	#查看所有容器及大小

创建并启动容器

docker run 参数
参数说明:
* -i:保持容器运行。通常与-t同时使用。加入it这两个参数后,容器创建后自动进入容器中,退出容器后,容器自动关闭
* -t:为容器重新分配一个伪输入终端,通常与-i同时使用
* -d:以守护(后台)模式运行容器。创建一个容器在后台运行,需要使用docker exec进入容器。退出后,容器不会关闭。
* -it创建的容器一般称为交互式容器,-id创建的容器一般称为守护式容器
* --name:为创建的容器命名

docker run -it --name=d1 centos:7 /bin/bash	#创建交互式容器
docker run -id --name=d2 centos:7 	#创建守护式容器
注意:交互式容器,exit后容器自动关闭,守护式容器会在后台执行

进入容器

docker exec -it 容器名称	/bin/bash
docker exec -it d2 /bin/bash

停止容器

docker stop 容器名称

启动容器

docker start 容器名称

删除容器:容器停止运行后才能删除

docker rm 容器名称

查看容器信息

docker inspect 容器名称

三、Docker容器的数据卷

3.1数据卷的概念、作用

由于Docker容器删除后,容器数据也会随之被删除,而且Docker容器也不能直接跟外部机器直接交换文件,所以就有了数据卷
数据卷的概念

  • 数据卷是宿主机的一个目录或文件
  • 当容器目录和数据卷目录绑定后,对方的修改会立即同步
  • 一个数据卷可以被多个容器同时挂载
  • 一个容器也可以被挂载多个数据卷
    数据卷的作用
  • 容器数据持久化
  • 外部机器和容器间的通信
  • 容器之间的数据交换

3.2配置数据卷

创建启动容器时,使用-v 参数设置数据卷

docker run ... -v 宿主机目录(文件):容器内目录(文件)

注意事项:

  1. 容器目录必须是绝对路径
  2. 如果目录不存在,会自动创建
  3. 可以挂载多个数据卷
    在这里插入图片描述

例:
创建d1挂载/root/data到/root/data_container

docker run -it --name=d1 -v /root/data:/root/data_container centos:7 /bin/bash

在容器内绑定数据卷的目录创建文件

[root@c51b0f30b587 /]# cd /root/data_container/
[root@c51b0f30b587 data_container]# echo "my text" > a.txt
[root@c51b0f30b587 data_container]# ll
total 4
-rw-r--r--. 1 root root 8 Jan  3 15:30 a.txt
[root@c51b0f30b587 data_container]# cat a.txt 
my text
[root@c51b0f30b587 data_container]# 

exit退出容器,可以看到数据卷文件还在

[root@c51b0f30b587 data_container]# exit
exit
[root@kkb ~]# cd /root/data/
[root@kkb data]# ll
total 4
-rw-r--r--. 1 root root 8 Jan  3 21:00 a.txt
[root@kkb data]# cat a.txt 
my text

删除d1容器,数据卷数据依然存在

[root@kkb data]# docker rm d1
d1
[root@kkb data]# ll
total 4
-rw-r--r--. 1 root root 8 Jan  3 21:00 a.txt
[root@kkb data]# cat a.txt 
my text

重新恢复d1,/root/data_container目录数据恢复

[root@kkb data]# docker run -it --name=d1 -v /root/data:/root/data_container centos:7 /bin/bash
[root@e705370dfcb6 /]# cd /root/data_container/
[root@e705370dfcb6 data_container]# ll
total 4
-rw-r--r--. 1 root root 8 Jan  3 15:30 a.txt
[root@e705370dfcb6 data_container]# cat a.txt 
my text

3.3配置数据卷容器

多容器进行数据交换,多个容器挂载同一个数据卷容器,完成数据交互
在这里插入图片描述

  1. 创建启动d3数据卷容器,使用-v参数,设置数据卷
docker run -it --name=d3 -v /volume centos:7 /bin/bash
[root@data]# docker run -it --name=d3 -v /volume centos:7 /bin/bash
[root@b252960547bd /]

这里没有指定宿主目录,默认生成一个宿主机目录
新开一个连接,可以查看d3的信息

docker inspect d3 
  1. 创建启动d4 、d5容器,使用–volumes-from参数,设置数据卷
docker run -it --name=d4 --volumes-from d3 centos:7 /bin/bash
docker run -it --name=d5 --volumes-from d3 centos:7 /bin/bash

查看开启的容器

[root@kaikeba ~]# docker ps
CONTAINER ID   IMAGE      COMMAND       CREATED          STATUS          PORTS     NAMES
4fa7c223fd3d   centos:7   "/bin/bash"   21 seconds ago   Up 17 seconds             d5
9ec2191b444b   centos:7   "/bin/bash"   7 minutes ago    Up 7 minutes              d4
b252960547bd   centos:7   "/bin/bash"   20 minutes ago   Up 20 minutes             d3
[root@kaikeba ~]# 

使用 c3数据卷容器创建c1,c2,这时即使c3关闭不影响c3,c4交互
数据卷小结

  1. 数据卷概念
    宿主机的一个目录或文件
  2. 数据卷作用
    容器数据持久化
    客户端和容器数据交换
    容器间数据交换
  3. 数据卷容器
    创建一个容器,挂载一个目录,让其他容器继承自该容器( --volume-from )。
    通过简单方式实现数据卷配置

四、Docker应用部署

4.1MySql

分析

  • 容器内的网络服务和外部机器不能直接通信
  • 外部机器和宿主机可以直接通信
  • 宿主机和容器可以直接通信
  • 当容器中的网络服务需要被外部机器访问时,可以将容器中提供服务的端口* 映射到宿主机的端口上。外部机器访问宿主机的端口,从而间接访问容器的服务。
  • 这种操作称为:端口映射
    在这里插入图片描述
  1. 搜索mysql镜像
docker search mysql
  1. 拉取镜像
docker pull mysql:5.6
  1. 创建容器,设置端口映射、目录映射
#在/root目录下创建mysql目录用于存储mysql数据信息
mkdir /root/mysql

cd /root/mysql

docker run -id -p 3307:3306 --name=d_mysql \
-v $PWD/conf:/etc/mysql/conf.d \
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 mysql:5.6

参数说明:
* -p 3307:3306:将容器的3306端口映射到宿主机的3307端口
* -v $PWD/conf:/etc/mysql/conf.d:将主机当前目录下的conf/my.cnf挂载到容器的/etc/mysql//my.cnf。配置目录
* -v $PWD/logs:/logs:将主机当前目录下的 logs 目录挂载到容器的 /logs。日志目录
* -v $PWD/data:/var/lib/mysql :将主机当前目录下的data目录挂载到容器的 /var/lib/mysql 。数据目录
* -e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码。
  1. 进入容器,操作mysql
docker exec -it c_mysql /bin/bash
mysql -uroot -p123456
show databases;
create database db1;
  1. 使用外部机器连接容器中的mysql

4.2Tomcat

  1. 搜索tomcat镜像
docker search tomcat
  1. 拉取tomcat镜像
docker pull tomcat
  1. 创建容器,设置端口映射、目录映射
# 在/root目录下创建tomcat目录用于存储tomcat数据信息
mkdir ~/tomcat
cd ~/tomcat

docker run -id --name=c_tomcat \
-p 8080:8080 \
-v $PWD:/usr/local/tomcat/webapps \
tomcat
参数说明:
* -p 8080:8080:将容器的8080端口映射到主机的8080端口
* -v $PWD:/usr/local/tomcat/webapps:将主机中当前目录挂载到容器的webapps
  1. 使用外部机器访问tomcat

4.3.Nginx

  1. 搜索redis镜像
docker search redis
  1. 拉取redis镜像
docker pull redis:5.0
  1. 创建容器,设置端口映射
docker run -id --name=c_redis -p 6379:6379 redis:5.0
  1. 使用外部机器连接redis
./redis-cli.exe -h 192.168.220.12 -p 6379
keys *
set name lxs
get name
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值