Docker的详细使用
程序员文章站
2022-06-16 13:13:33
Docker的详细使用一、Docker概述1.Docker为什么会出现?二、Docker安装1.Docker的基本组成2. 安装Docker一、Docker概述1.Docker为什么会出现?一款产品:开发-上线两套环境!应用环境,应用配置。开发-运维。问题:我在我的电脑上可以运行!版本更新,导致服务不可用!对于运维来说,考验就十分大?环境配置是十分的麻烦,每一个机器都要部署环境(集群 Redis、ES、Hadoop)!费时费力。发布个项目(jr+( Redis MySQL jdk ES)),项目能...
Docker的详细使用
一、Docker概述
1. Docker为什么会出现?
- 一款产品:开发-上线两套环境!应用环境,应用配置。
- 开发-运维。问题:我在我的电脑上可以运行!版本更新,导致服务不可用!对于运维来说,考验就十分大?环境配置是十分的麻烦,每一个机器都要部署环境(集群
Redis
、ES
、Hadoop
)!费时费力。发布个项目(jr
+(Redis
MySQ
Ljdk
ES
)),项目能不能都带上环境安装打包!之前在服努器配置—个应用的环境Redis MySQL jdk ES Hadoop
,配置超麻烦了,不能够跨平台。Windows
,最后发布到Linux
! - 传统:开发
jar
,运维来做。 - 现在:开发打包部署上线,一套流程做完。
-
java-apk
-发布(应用商店)-张三使用apk
–安装即可用。
-java-jar
(环境)-…打包项目带上环境(镜像)-(Dσcker
仓库:商店)-…下载我们发布的镜像…-直接运行即。 -
Docker
的思想就来自于集装箱! -
JRE-多个应用(端口冲突)
–原来都是交叉的! - 隔离:
Docker
核心思想!打包装箱!每个箱子是互相隔离的。 -
Docker
通过隔离机制,可以将服务器利用到极致!
二、Docker安装
1. Docker的基本组成
- 镜像(
Image
)docker
镜像就好比是—个模板,可以通过这个模板来创建容器服务,tomcat
镜像==>run
==>tomcat01
容器(提供服务器)通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的。 - 容器(
container
):Docker
利用容器技术,独立运行个或者个组应用,通过镜像来创建的。
启动,停止,删除,基本命令
目前就可以把这个容器理解为就是一个简易的linux
系统 - 仓库(
repository
)
仓库就是存放镜像的地方
仓库分为公有仓库和私有仓库Docker hub
(默认是国外的)
阿里云…都有容器服务器(配置镜像加速!)
2. 安装Docker
环境准备
1、需要会一点点的 Linux的基础
2、 Centos7
3、我们使用 Shel连接远程服务器进行操作!
环境查看
## 查看系统内核是 3.10 以上的
[root@iz2ze0j4s19xhxuqg75l0zz ~]# uname -r
3.10.0-1127.el7.x86_64
[root@iz2ze0j4s19xhxuqg75l0zz ~]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
安装
## 1.卸载旧的版本
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
## 2.需要的安装包
sudo yum install -y yum-utils
## 3.设置镜像仓库
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo # 默认是国外的
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
## 更新软件包索引
yum makecache fast
## 4.安装docker相关的 docker-ce社区版 ee企业版
sudo yum install docker-ce docker-ce-cli containerd.io
## 5.启动docker
systemctl start docker
## 6.使用docker version查看docker是否安装成功
## 7. hello-world
docker run hello-world
##8.查看镜像
docker images
##1.卸载docker
sudo yum remove docker-ce docker-ce-cli containerd.io
##2.删除资源
sudo rm -rf /var/lib/docker
3. 配置阿里云镜像加速器
针对Docker客户端版本大于 1.10.0 的用户
您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://m5c73hcp.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
4. docker run hello-world 命令的执行流程
5. 底层原理
Docker
是什么工作的?Docker
是一个 Client- Server
结构的系统, Docker
的守护进程运行在主机上。通过 Socket
从客户端访问。Dockerserver
接收到 Docker- Client
的指令,就会执行这个命令!Docker
为什么比VM
快?
1、 Docker
有着比虚拟机更少的抽象层。
2、 Docker
利用的是宿主机的内核,vm
需要是Guest os
。
所以说,新建一个容器的时候, docker
不需要想虚拟机一样重新加载一个操作系统內核,避免引导。虚拟机是加载 Guest os
,分钟级别的,而 docker
是利用宿主机的操作系统吗,省略了这个复杂的过程,秒级!
三、Docker的常用命令
1. 帮助命令
# 显示docker的版本信息
docker version
# 显示docker的系统信息,包括镜像和容器的数量
docker info
# 帮助命令
docker --help
2. 镜像命令
-
docker images
查看所有本地的主机上的镜像[root@iz2ze0j4s19xhxuqg75l0zz ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql latest e1d7dc9731da 2 months ago 544MB # 解释 REPOSITORY 镜像仓库源仓库 TAG 镜像的标签 IMAGE ID 镜像id CREATED 镜像创建时间 SIZE 镜像大小 # 可选项 -a, --all 显示所有镜像(默认隐藏中间镜像) -q, --quiet 只显示镜像的id
-
docker search
搜索镜像[root@iz2ze0j4s19xhxuqg75l0zz ~]# docker search mysql NAME DESCRIPTION STARS OFFICIAL AUTOMATED mysql MySQL is a widely used, open-source relation… 10156 [OK] mariadb MariaDB is a community-developed fork of MyS… 3738 [OK] # 可选项,通过搜索来过滤 --filter=STARS=3000
-
docker pull
下载镜像[root@iz2ze0j4s19xhxuqg75l0zz ~]# docker pull mysql Using default tag: latest # 如果不写tag ,默认就是latest latest: Pulling from library/mysql bb79b6b2107f: Pull complete # 分层下载,docker image的核心 联合文件系统 49e22f6fb9f7: Pull complete 842b1255668c: Pull complete 9f48d1f43000: Pull complete c693f0615bce: Pull complete 8a621b9dbed2: Pull complete 0807d32aef13: Pull complete a56aca0feb17: Pull complete de9d45fd0f07: Pull complete 1d68a49161cc: Pull complete d16d318b774e: Pull complete 49e112c55976: Pull complete Digest: sha256:8c17271df53ee3b843d6e16d46cff13f22c9c04d6982eb15a9a47bd5c9ac7e2d #签名 Status: Downloaded newer image for mysql:latest docker.io/library/mysql:latest #真实地址 # 等价于它 docker pull mysql docker pull docker.io/library/mysql:latest # 指定版本下载 [root@iz2ze0j4s19xhxuqg75l0zz ~]# docker pull mysql:5.7 5.7: Pulling from library/mysql bb79b6b2107f: Already exists 49e22f6fb9f7: Already exists 842b1255668c: Already exists 9f48d1f43000: Already exists c693f0615bce: Already exists 8a621b9dbed2: Already exists 0807d32aef13: Already exists f15d42f48bd9: Pull complete 098ceecc0c8d: Pull complete b6fead9737bc: Pull complete 351d223d3d76: Pull complete Digest: sha256:4d2b34e99c14edb99cdd95ddad4d9aa7ea3f2c4405ff0c3509a29dc40bcb10ef Status: Downloaded newer image for mysql:5.7 docker.io/library/mysql:5.7
-
docker rmi
删除镜像[root@iz2ze0j4s19xhxuqg75l0zz ~]# docker rmi -f 镜像id #删除指定镜像 [root@iz2ze0j4s19xhxuqg75l0zz ~]# docker rmi -f 镜像id 镜像id 镜像id #删除多个镜像 [root@iz2ze0j4s19xhxuqg75l0zz ~]# docker rmi -f $(docker images -aq) #删除全部镜像
3. 容器命令
说明:我们有了镜像才可以创建容器,
linux
,下载一个centos
镜像来测试学习
docker pull centos
- 新建容器并启动
docker run [可选参数] image
# 参数 说明
--name="Name" 容器名字 tomcat01 tomcat02,用来区分容器
-d 后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p 指定容器的端口 -p 8080:8080
-P 随机指定端口
#测试,启动并进入容器
[root@iz2ze0j4s19xhxuqg75l0zz ~]# docker run -it centos /bin/bash
[root@c9c4bb01f7dc /]#
[root@c9c4bb01f7dc /]# ls #查看容器内的centos,基础版本,很多命令都不完善
bin etc lib lost+found mnt proc run srv tmp var
dev home lib64 media opt root sbin sys usr
#从容器退出主机
exit
- 列出所有的运行容器
docker ps
#列出当前正在运行的容器
-a #列出当前正在运行的容器+带出历史运行过的容器
-n=? #显示最近创建的容器
-q #只显示容器的编号
- 退出容器
exit #直接容器停止并退出
Ctrl + P +Q #容器不停止退出
- 删除容器
docker rm 容器id #删除指定的容器,不能删除正在运行的容器,如果要强制删除,rm -f
docker rm -f $(docker ps -aq) #删除所有容器
docker ps -a -q|xargs docker rm #删除所有容器(没有运行的)
- 启动和停止容器的操作
docker start 容器id #启动容器
docker restart 容器id #重启容器
docker stop 容器id #停止当前正在运行的容器
docker kill 容器id #强制停止当前容器
4. 其他常用命令
-
后台启动命令
docker run -d 镜像名 [root@iz2ze0j4s19xhxuqg75l0zz /]# docker run -d centos #问题 docker ps,发现 centos停止了 #常见的坑: docker容器使用后台运行,就必须要有要一个前台进程, docker发现没有应用,就会自动停止 #ngInx,容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了
-
查看日志、
docker logs -f -t --tail 容器,没有日志 #自己编写一段shell脚本(测试未成功) [root@iz2ze0j4s19xhxuqg75l0zz /]# docker run -d centos /bin/bash -c “while true;do echo canying;sleep 1;done” #显示日志 -tf #显示日志 --tail number #要显示日志的条数 [root@iz2ze0j4s19xhxuqg75l0zz /]# docker logs -tf --tail 10 dce7b86171bf
-
查看容器中进程信息
docker top 容器id [root@iz2ze0j4s19xhxuqg75l0zz /]# docker top d43224512238 UID PID PPID C STIME TTY TIME CMD root 19810 19794 0 16:26 ? 00:00:00 /bin/bash
-
查看镜像的元数据
docker inspect 容器id [root@iz2ze0j4s19xhxuqg75l0zz /]# docker inspect d43224512238 [ { "Id": "d43224512238bf10a19bb33de20f00c8fcf23b4cae442f9461cd716bcdd69e7a", "Created": "2020-11-12T08:26:47.279424514Z", "Path": "/bin/bash", "Args": [],
-
进入当前正在运行的容器
# 我们通常容器都是使用后台方式运行的,需要进入容器,修改一些配置
# 命令
docker exec -it 容器id bashShell
# 测试
[root@iz2ze0j4s19xhxuqg75l0zz /]# docker exec -it d43224512238 /bin/bash
[root@d43224512238 /]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 08:26 pts/0 00:00:00 /bin/bash
root 14 0 0 08:43 pts/1 00:00:00 /bin/bash
root 27 14 0 08:43 pts/1 00:00:00 ps -ef
# 方式二
docker attach 容器id
# 测试
[root@iz2ze0j4s19xhxuqg75l0zz /]# docker attach d43224512238
[root@d43224512238 /]#
正在执行当前代码...
#docker exec #进入容器后开启一个新的终端,可以在里面操作(常用)
#docker attach #进入容器正在执行的终端,不会启动新的进程
- 从容器内拷贝文件到主机上
docker cp 容器id:容器内路径 目的主机路径
四、Docker安装软件
1. 安装nginx
-
搜索镜像
docker search nginx
-
下载镜像
docker pull nginx
-
运行测试
[root@iz2ze0j4s19xhxuqg75l0zz /]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest c39a868aad02 6 days ago 133MB
centos latest 0d120b6ccaa8 3 months ago 215MB
# -d 后台运行
# --name 宿主机端口,容器内端口
[root@iz2ze0j4s19xhxuqg75l0zz /]# docker run -d --name nginx01 -p 3344:80 nginx
f73ed2fc8142bcf30467c996c9c862875c871adcaf046c959e21ddb3617fa3be
[root@iz2ze0j4s19xhxuqg75l0zz /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f73ed2fc8142 nginx "/docker-entrypoint.…" 6 seconds ago Up 4 seconds 0.0.0.0:3344->80/tcp nginx01
[root@iz2ze0j4s19xhxuqg75l0zz /]# curl localhost:3344
#进入容器
[root@iz2ze0j4s19xhxuqg75l0zz ~]# docker exec -it nginx01 /bin/bash
root@f73ed2fc8142:/# whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
root@f73ed2fc8142:/# cd /etc/nginx
root@f73ed2fc8142:/etc/nginx# ls
conf.d koi-utf mime.types nginx.conf uwsgi_params
fastcgi_params koi-win modules scgi_params win-utf
root@f73ed2fc8142:/etc/nginx#
2. 安装tomcat
官方的使用
docker run -it --rm tomcat:9.0
我们之前的启动都是后台,停止了容器之后,容器还是可以查到 docker run -it --rm,一般用来测试,用完就删除
- 搜索镜像
docker pull tomcat
- 启动运行
docker run -d -p 3355:8080 --name tomcat01 tomcat
#进入容器
[root@iz2ze0j4s19xhxuqg75l0zz ~]# docker exec -it tomcat01 /bin/bash
#发现问题:1、linux命令少了,2、没有 webapps。阿里云镜像的原因。默认是最小的镜像,所有不必要的都剔除掉
#保证最小可运行的环境
cp -r webapps.dist/* webapps
本文地址:https://blog.csdn.net/qq_35996924/article/details/109572076
下一篇: CheckBox 自定义选中样式