本文目录
1.docker简介
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。
1.1、Docker虚拟化有三个概念需要理解
- 镜像(Image):docker的镜像其实就是模板,跟我们常见的ISO镜像类似,是一个样板。
- 容器(Container):镜像启动后的实例称为一个容器;容器是独立运行的一个或一组应用。
- 仓库(Repository):仓库是存放镜像的地方,分为公开仓库(Public)和私有仓库(Private)两种形式。
1.2、Docker 优点
- 持续集成
在项目快速迭代情况下,轻量级容器对项目快速构建、环境打包、发布等流程就能提高工作效率。 - 版本控制
每个镜像就是一个版本,在一个项目多个版本时可以很方便管理。 - 可移植性
容器可以移动到任意一台Docker主机上,而不需要过多关注底层系统。 - 标准化
应用程序环境及依赖、操作系统等问题,增加了生产环境故障率,容器保证了所有配置、依赖始终不变。 - 隔离性与安全
容器之间的进程是相互隔离的,一个容器出现问题不会影响其他容器
2.Centos下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)的拉取速度也是不慢的(也可能与我公司网络比较快有关系😜)
3.Docker镜像 (Image)
Docker镜像仓库地址:https://hub.docker.com/
简单说, Docker镜像是一个不包含Linux内核而又精简的Linux操作系统。
3.1.获取镜像
从 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
3.2 .镜像操作常用命令
-
查看镜像
通过使用
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:
镜像IDCREATED
:镜像创建时间SIZE
:镜像大小# 列出所有本机已有的镜像 docker image ls #列出指定的镜像 docker image ls redis
-
删除本地镜像
如果要删除本地的镜像,可以使用
docker image rm
命令或者docker rmi
命令,其格式为:docker image rm [Options] <Image1> [<Image2> ...] docker rmi [Options] <Image1> [<Image2> ...]
常用参数
-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 说明:
- **-o 😗*输出到的文件。
保存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 说明:
- **–automated 😗*只列出 automated build类型的镜像;
- **–no-trunc 😗*显示完整的镜像描述;
- **-f <过滤条件>:**比如列出收藏数不小于指定值的镜像。
# 列出收藏数不小于10的java镜像 docker search -f stars=10 java #不加参数 docker search java
4.Docker容器(container )
简单的说,容器是独立运行的一个或一组应用,以及它们的运行态环境。
4.1 新建并启动容器
命令格式如下:
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启动的容器
4.2 查看容器
命令格式如下:
docker ps [OPTIONS]
# 列出所有容器
docker ps -a
输出详情介绍:
- CONTAINER ID: 容器 ID。
- IMAGE: 使用的镜像。
- COMMAND: 启动容器时运行的命令。
- CREATED: 容器的创建时间。
- STATUS: 容器状态。
- PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。
- NAMES: 自动分配或者指定的容器名称。
4.3 启动、重启、终止容器
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
4.4 删除容器
docker rm :删除一个或多个容器。docker rm命令只能删除处于终止或退出状态的容器,并不能删除 还处于运行状态的容器
#停止
docker stop 6a3e80cb0a27 # 根据容器ID停止
# 删除容器
docker rm 6a3e80cb0a27
4.5 创建容器
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
4.6 查看容器日志
docker logs : 获取容器的日志 语法
命令格式:
docker logs [OPTIONS] CONTAINER
常用参数
- -f : 跟踪日志输出
- –tail :仅列出最新N条容器日志
查看tomcat运行日志
#查看最新的日志
docker logs -f --tail 1 tomcat8
4.7 进入容器
命令格式:
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
OPTIONS常用参数:
- -i :即使没有附加也保持STDIN 打开
- -t :分配一个伪终端
例子,进入redis终端
docker exec -it redis_test redis-cli
进入到bash终端
docker exec -it tomcat8 /bin/bash
使用exit
命令可以退出终端
5. Docker实战-常用软的安装
5.1 tomcat安装
-
拉取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
5.2 Mysql安装
参考 https://blog.csdn.net/u014576291/article/details/105890286
-
拉取镜像
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;
5.3 Redis安装
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 #停止实例
5.4 安装Nginx
#拉取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