docker的安装与使用
1.安装docker
要求内核版本不低于 3.10
1.1.卸载(可选)
如果之前安装过旧版本的Docker,可以使用下面命令卸载:
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine \
docker-ce
1.2安装docker
(1)首先需要大家虚拟机联网,安装yum工具
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2 --skip-broken
(2)然后更新本地镜像源:
yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
yum makecache fast
(3)然后输入命令:安装docker
yum install -y docker-ce
docker-ce为社区免费版本。
1.3.启动docker
Docker应用需要用到各种端口,逐一去修改防火墙设置。非常麻烦,因此建议大家直接关闭防火墙!
启动docker前,一定要关闭防火墙后!!
# 关闭
systemctl stop firewalld
# 禁止开机启动防火墙
systemctl disable firewalld
通过命令启动docker:
systemctl start docker # 启动docker服务
systemctl stop docker # 停止docker服务
systemctl restart docker # 重启docker服务
然后输入命令,可以查看docker版本:
docker -v
1.4.配置镜像加速
docker官方镜像仓库网速较差,我们需要设置国内镜像服务:
执行以下命令即可完成设置
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://omsgp3y7.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
以上命令来自阿里云的镜像加速文档:阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台
2.镜像有关命令
2.1镜像名称
-
镜名称一般分两部分组成:[repository]:[tag]。
-
在没有指定tag时,默认是latest,代表最新版本的镜像
如图:
代表5.7版本的MySQL镜像。
2.2镜像命令
常见的镜像操作命令如图:
拉取镜像
#去镜像仓库[DockerHub](https://hub.docker.com/)搜需要拉取的镜像,比如nginx
docker pull nginx
查看镜像
docker images
保存镜像到磁盘
命令格式:
docker save -o [保存的目标文件名称] [镜像名称]
docker save -o nginx.tar nginx:latest #导出nginx镜像到磁盘
从磁盘导入镜像
docker rmi nginx:latest #导入前需要先删除本地的nginx镜像
docker load -i nginx.tar #从磁盘导入镜像
3.容器操作相关命令
2.1容器命令
容器操作的命令如图:
容器保护三个状态:
-
运行:进程正常运行
-
暂停:进程暂停,CPU不再运行,并不释放内存
-
停止:进程终止,回收进程占用的内存、CPU等资源
其中:
-
docker run:创建并运行一个容器,处于运行状态
-
docker pause:让一个运行的容器暂停
-
docker unpause:让一个容器从暂停状态恢复运行
-
docker stop:停止一个运行的容器
-
docker start:让一个停止的容器再次运行
-
docker rm:删除一个容器
2.2创建并运行一个nginx容器
1.创建并运行nginx容器的命令
docker run \
--name mn \
-p 80:80 \
-d \
nginx
命令解读:
-
docker run :创建并运行一个容器
-
--name : 给容器起一个名字,比如叫做mn
-
-p :将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口
-
-d:后台运行容器
-
nginx:镜像名称
2.进入容器,修改文件
需求:进入Nginx容器,修改HTML文件内容,添加“北京欢迎您”
1)进入Nginx容器
docker exec \
-it \
mn \
bash
命令解读:
-
docker exec :进入容器内部,执行一个命令
-
-it : 给当前进入的容器创建一个标准输入、输出终端,允许我们与容器交互
-
mn :要进入的容器的名称
-
bash:进入容器后执行的命令,bash是一个linux终端交互命令
2)进入nginx的HTML所在目录 /usr/share/nginx/html
容器内部会模拟一个独立的Linux文件系统,看起来如同一个linux服务器一样:
nginx的环境、配置、运行文件全部都在这个文件系统中,包括我们要修改的html文件。
查看DockerHub网站中的nginx页面,可以知道nginx的html目录位置在/usr/share/nginx/html
我们执行命令,进入该目录:
cd /usr/share/nginx/html
查看目录下文件:
3)修改index.html的内容
容器内没有vi命令,无法直接修改,我们用下面的命令来修改:
sed -i -e 's#Welcome to nginx#北京欢迎您#g' -e 's#<head>#<head><meta charset="utf-8">#g' index.html
3.访问index.html的内容
在浏览器访问自己的虚拟机地址,即可看到结果。(不知道虚拟机ip地址,可以通过命令ifconfig查看)
2.3容器查看命令
查看容器日志命令:
docker logs #添加 -f 参数可以持续查看日志
查看容器命令
docker ps #查看运行中的容器
docker ps -a #查看所有容器,包括已经停止的
4.数据卷(容器数据管理)
4.1什么是数据卷
数据卷(volume)是一个虚拟目录,指向宿主机文件系统中的某个目录。
一旦完成数据卷挂载,对容器的一切操作都会作用在数据卷对应的宿主机目录了。
这样,我们操作宿主机的/var/lib/docker/volumes/html目录,就等于操作容器内的/usr/share/nginx/html目录了
4.2数据卷的作用
-
将容器与数据分离,解耦合,方便操作容器内数据,保证数据安全
比如:在之前的nginx容器案例中,修改nginx的html页面时,需要进入nginx内部。并且因为没有编辑器,修改文件也很麻烦。这就是因为容器与数据(容器内文件)耦合带来的后果。要解决这个问题,必须将数据与容器解耦,这就要用到数据卷了。
挂载数据卷之后就可以在数据卷对应的宿主机目录中修改html页面。
4.3数据卷操作命令
数据卷操作的基本语法:docker volume [COMMAND]
docker volume create #创建一个volume
docker volume inspect #显示一个或多个volume的信息
docker volume ls #列出所有的volume
docker volume prune #删除未使用的volume
docker volume rm #删除一个或多个指定的volume
4.4如何挂载数据卷
这里以nginx容器挂载数据卷为例子
docker run \
--name mn \
-v html:/usr/share/nginx/html \
-p 80:80 \
-d \
nginx
这里的-v就是挂载数据卷的命令:
-v html:/usr/share/nginx/html #把html数据卷挂载到nginx容器内的/usr/share/nginx/html这个目录中
4.5挂载本地目录
容器不仅仅可以挂载数据卷,也可以直接挂载到宿主机目录上
这里以MySQL容器举例:
前置准备:
1)拉取mysql镜像
2)创建目录/tmp/mysql/data
3)创建目录/tmp/mysql/conf
4)将hmy.cnf文件上传到/tmp/mysql/conf
语法:
目录挂载与数据卷挂载的语法是类似的:
-
-v [宿主机目录]:[容器内目录]
-
-v [宿主机文件]:[容器内文件]
docker run \
--name mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-p 3306:3306 \
-v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf \
-v /tmp/mysql/date:/var/lib/mysql \
-d \
mysql:5.7.25
-
-e MYSQL_ROOT_PASSWORD=54088 #配置root账户的密码
-
-v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf #挂载mysql配置目录
-
-v /tmp/mysql/date:/var/lib/mysql #挂载mysql数据目录
4.6数据卷挂载和直接挂载的区别
挂载结构:
-
数据卷挂载模式:宿主机目录 --> 数据卷 ---> 容器内目录
-
直接挂载模式:宿主机目录 ---> 容器内目录
语法:
-
数据卷挂载 -v volume名称:容器内目录
-
直接挂载 -v 宿主机目录:容器内目录
优缺点:
-
数据卷挂载耦合度低,由docker来管理目录,但是目录较深,不好找
-
目录挂载耦合度高,需要我们自己管理目录,不过目录容易寻找查看
示意图