Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。
1.1、Docker虚拟化有三个概念需要理解
1.2、Docker 优点
centos版本查看
Docker 要求 CentOS 系统的内核版本高于 3.10,通过 uname -r
命令查看你当前的内核版本
通过cat /etc/centos-release
命令查看centos系统版本命令。
确保 yum 包更新到最新。
yum update
卸载旧版本(如果安装过旧版本的话)
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
可以查看所有仓库中所有docker版本,并选择特定版本安装
yum list docker-ce --showduplicates | sort -r
安装docker
# 安装最新版本
yum install docker-ce
# 指定版本安装
yum install <docker-version> # 例如:sudo yum install docker-ce-17.12.0.ce
启动docker
# 启动
systemctl start docker
#停止
systemctl stop docker
#开机启动
systemctl enable docker
测试 Docker 是否安装正确
docker run hello-world
或者使用docker version
验证,有client和service两部分表示docker安装启动都成功了
镜像加速
如果在拉取镜像的过程中速度比较慢,此时可以配置镜像加速器。国内很多云服务商都提供了国内加速器服务
道客镜像站_DaoCloud道客 https://www.daocloud.io/mirror (配置最方便,一行命令搞定)
阿里云Docker镜像加速 https://help.aliyun.com/document_detail/60750.html
腾讯云Docker镜像加速 https://cloud.tencent.com/document/product/1207/45596
根据我的的体验,现在不配置国内的镜像源,镜像(Image)的拉取速度也是不慢的(也可能与我公司网络比较快有关系)
Docker镜像仓库地址:https://hub.docker.com/
简单说, Docker镜像是一个不包含Linux内核而又精简的Linux操作系统。
从 Docker 镜像仓库获取镜像的命令是 docker pull
。其命令格式为:
docker pull [Options] NAME[:TAG]
如果不显式指定TAG, 则默认会选择last标签
常用参数[Options]
-a, --all-tags=true|false
: 是否获取仓库中所有镜像,默认为否;
--disable-content-trust
: 跳过镜像内容的校验,默认为 true;
例子:拉取一个redis的镜像,指定安装版本为5.0.14,如果不指定默认为最新版
docker pull redis:5.0.14
# 不指定TAG默认拉取最新的
docker pull redis
查看镜像
通过使用docker image ls
命令,列出本机已有的镜像:
[root@localhost ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
redis 5.0.14 c5da061a611a 2 days ago 110MB
hello-world latest feb5d9fea6a5 3 months ago 13.3kB
各个选项说明:
REPOSITORY
:表示镜像的仓库源
TAG
:镜像的标签
IMAGE ID:
镜像ID
CREATED
:镜像创建时间
SIZE
:镜像大小
# 列出所有本机已有的镜像
docker image ls
#列出指定的镜像
docker image ls redis
删除本地镜像
如果要删除本地的镜像,可以使用 docker image rm
命令或者docker rmi
命令,其格式为:
docker image rm [Options] [ ...]
docker rmi [Options] [ ...]
常用参数
-f, -force
: 强制删除镜像,即便有容器引用该镜像;
-no-prune
: 不要删除未带标签的父镜像。
例如:根据IMAGE ID或者镜像名称删除
# 根据ID删除
docker image rm c5da061a611a # docker rmi c5da061a611a
#根据名称删除
docker image rm redis:5.0.14 # docker rmi redis:5.0.14
镜像的保存(save)和载入(load)
使用save
和load
命令,可以对镜像保存和载入
save
命令格式为:
docker save [OPTIONS] IMAGE [IMAGE...]
OPTIONS 说明:
保存Redis镜像到redis.tar
docker save redis:5.0.14 -o redis.tar
load
命令
载入保存的镜像
docker load - i redis.tar
常用参数:
--input , -i
: 指定导入的文件。
--quiet , -q
: 精简输出信息。
查找镜像
命令格式为:
docker search [OPTIONS] IMAGE
OPTIONS 说明:
# 列出收藏数不小于10的java镜像
docker search -f stars=10 java
#不加参数
docker search java
简单的说,容器是独立运行的一个或一组应用,以及它们的运行态环境。
命令格式如下:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
比如,启动一个redis容器
docker run -d -it --name redis_test -p 6379:6379 redis:5.0.14
OPTIONS 常用参数:
-d, --detach=false
: 后台运行容器,并返回容器ID
-i, --interactive=false
: 以交互模式运行容器,通常与 -t 同时使用
-t, --tty=false
: 为容器重新分配一个伪输入终端,通常与 -i 同时使用
-P, --publish-all=false
: 随机端口映射,容器内部端口随机映射到主机的端口
-p, --publish=[]
: 指定端口映射,格式为:主机(宿主)端口:容器端口
--name="redis-test"
: 为容器指定一个名称
-h , --hostname="test"
: 指定容器的hostname
-e , --env=[]
: 设置环境变量,容器中可以使用该环境变量
--net="bridge"
: 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型
-v, --volume
: 绑定一个卷
--restart=no
:指定容器停止后的重启策略 no:容器退出时不重启 on-failure:容器故障退出(返回值非零)时重启 always:容器退出时总是重启
--rm=false
: 指定容器停止后自动删除容器,不能以docker run -d启动的容器
命令格式如下:
docker ps [OPTIONS]
# 列出所有容器
docker ps -a
输出详情介绍:
docker start
:启动一个或多个已经被停止的容器
docker stop
:停止一个运行中的容器
docker restart
:重启容器
命令格式如下:
docker start [OPTIONS] CONTAINER [CONTAINER...]
docker stop [OPTIONS] CONTAINER [CONTAINER...]
docker restart [OPTIONS] CONTAINER [CONTAINER...]
例子
#停止
docker stop 6a3e80cb0a27 # 根据容器ID
# 启动
docker start 6a3e80cb0a27 # 根据容器ID
#重启
docker restart 6a3e80cb0a27 # 根据容器ID
docker rm :删除一个或多个容器。docker rm命令只能删除处于终止或退出状态的容器,并不能删除 还处于运行状态的容器
#停止
docker stop 6a3e80cb0a27 # 根据容器ID停止
# 删除容器
docker rm 6a3e80cb0a27
docker create
:创建一个新的容器但不启动它。用法同 docker run命令。
命令格式:
docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
大部分参数用法与docker run命令参数相同
例子,创建一个tomcat容器
docker create -it --name tomcat8 -p 8080:8080 tomcat:8.5-jre17-temurin
docker logs : 获取容器的日志 语法
命令格式:
docker logs [OPTIONS] CONTAINER
常用参数
查看tomcat运行日志
#查看最新的日志
docker logs -f --tail 1 tomcat8
命令格式:
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
OPTIONS常用参数:
例子,进入redis终端
docker exec -it redis_test redis-cli
进入到bash终端
docker exec -it tomcat8 /bin/bash
使用exit
命令可以退出终端
拉取tomcat镜像
docker pull tomcat:8.5.45-jdk8-corretto #拉取镜像
docker image ls #查看镜像
启动容器
docker run -itd -p 8080:8080 tomcat:8.5.45-jdk8-corretto --name tomcat8
启动容器后,就可以在浏览器访问了,http://IP:8080
进入到容器
docker exec -it t /bin/bash
部署一个简单的html页面
进入容器后,进入到tomcat的webapps目录
bash-4.2# cd /usr/local/tomcat/webapps/
# 在webapps目录下新建一个test目录
mkdir test
在test目录下新建一个html文件
vi index.html
浏览器访问,http://IP:8080/test/index.html
把文件拷贝到容器
使用docker cp
命令,可以把文件copy到容器的指定目录
# 把服务器上的test.war 拷贝到tomcat8容器里webapps目录下
docker cp test.war tomcat8:/usr/local/tomcat/webapps
拉取镜像
docker pull mysql:5.7.36
启动容器
docker run -itd --name mysql --restart always --privileged=true -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.36 --character-set-server=utf8 --collation-server=utf8_general_ci
docker run -e
设置环境变量,容器中可以使用该环境变量
参数说明:
-e MYSQL_ROOT_PASSWORD=123456
参数设置mysql的root的密码123456
--privileged=true
参数:使用该参数,container内的root拥有真正的root权限。否则,container内的root只是外部的一个普通用户权限。privileged启动的容器,可以看到很多host上的设备,并且可以执行mount。甚至允许你在docker容器中启动docker容器。
测试Mysql
# 进入mysql容器终端
docker exec -it mysql /bin/bash
# 登录mysql
mysql -uroot -p123456
# 查看数据库
show databases;
docker pull redis:5.0.14 #拉取redis镜像
docker run -itd --name redis_test -p 6379:6379 redis:5.0.14 #启动redis容器
#连接redis客户端
docker exec -it redis_test redis_cli
# 或者进入到终端后链接
docker exec -it redis_test /bin/bash
# 执行命令
./redis-cli
docker stop redis_test #停止实例
#拉取redis镜像
docker pull nginx:1.21.4-perl
#启动nginx容器
docker run -itd --name nginx -p 80:80 nginx:1.21.4-perl
# 进入nginx容器终端
docker exec -it nginx /bin/bash
# 查看html目录
cd /usr/share/nginx/html
#配置文件目录
cat /etc/nginx/nginx.conf