Docker
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Docker,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含6206字,纯文字阅读大概需要9分钟。
内容图文
Docker教程
1.Docker概述
Docker简单的讲就是一个虚拟化工具,容器化技术,可以实现快速简化服务部署之类的功能,它的核心是
一次构建,到处部署
,在第一次构建的时候,会构建完可用的docker镜像,如果以后需要使用,只需要通过几行命令拉取镜像,然后根据镜像创建出一个容器,将服务跑起来即可。
1.1 Docker介绍
Docker的意思是码头工人
,思想就是"集装箱",表示在物流中简化了运输中多次装货和卸货的时间 ,只需要进行一次封装,节省了大量的资源和时间成本
Docker不像传统的方式一样,只给你打包后的jar包或者war包以及说明安装文档,然后再去根据文档安装环境部署,而Docker是直接给一个docker镜像,这个镜像不仅包含运行的jar包和war包,还有运行服务所依赖的环境,只需要直接拉取镜像,然后创建容器,直接运行就可以。
那么我们现在知道Docker是为了一次构建,到处部署,那么如果只有一台服务器,也不会迁移,只需要部署一次,那么还需要使用Docker吗?如果你确信你的应用都是一次性的,而且只提供给自己使用,那么docker在这种场景下的优势不是特别明显,但是,你真的真的确信,你所做的工作只是一次性的吗?
总结一下Docker带来的好处:
更高效的交付和部署引用:
- 传统:一堆帮助文档,安装运行程序
- Docker:打包镜像发布测试 ,只需几条命令
**更便捷的升级和扩展 **:
- 要增加服务器?打包镜像分分中扩展一个服务器
更高效的计算资源利用:
- Docker是内核级别的虚拟机化,可以在一个物理机运行很多个容器实例,可以将服务器的性能提高到最佳
参考:Docker是什么?
1.2 Docker组成
镜像(Images):
镜像就是一个模版,可以通过镜像构建多个容器
,镜像不可以直接运行的,避免在运行中或者配置中损坏,最终服务运行或者项目运行就是在容器中运行的
容器(Container):
Docker利用容器技术,由镜像创建容器,独立运行一个或者一组应用
,每个容器由自己的专用文件系统,通过命令启动、停止、删除应用等!
仓库(Registry):
仓库就是存放镜像的地方
,分为共有仓库和私有仓库,镜像就是从仓库下载的
默认使用的是Docker Hub(国外的)下载很慢,可以使用国内的仓库,比如阿里云...
1.3 Docker为什么比虚拟机快
1.Docker不需要硬件资源虚拟化,运行在Docker容器上的应用直接使用的物理机资源,所以在内存、CPU上比虚拟机的利用率更高
2.Docker利用的是宿主机的内核,当新建一个容器的时候,不需要和虚拟机一样重新加载操作系统,省去了大量的时间
2.Docker安装
2.1 开始安装
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
4.安装的Docker引擎、客户端、容器;ce是社区版,ee是企业版,官方推荐使用社区版
#安装最新版本
sudo yum install docker-ce docker-ce-cli containerd.io
#安装指定版本
#1.列出可用版本
yum list docker-ce --showduplicates | sort -r
docker-ce.x86_64 3:18.09.1-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.0-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.1.ce-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.0.ce-3.el7 docker-ce-stable
#2.通过软件包的名称+版本字符串进行安装 VERSION_STRING:第二列第一个:一直到-前的字符,比如18.09.1
sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
5.启动Docker
sudo systemctl start docker
6.测试是否安装成功
docker version
7.运行hello-world
sudo docker run hello-world
run的执行流程:
8.查看下载的镜像
docker images
9.卸载Docker
#1.卸载Docker Engine,CLI和Containerd软件包:
sudo yum remove docker-ce docker-ce-cli containerd.io
#2.删除主机上的映像,容器,卷或自定义配置文件 /var/lib/docker:docker的默认工作路径
sudo rm -rf /var/lib/docker
2.1 阿里云镜像加速器
因为很多镜像在国外,下载非常慢,配上加速器会更快
阿里云官网容器镜像地址:https://cr.console.aliyun.com/cn-beijing/instances/mirrors
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-‘EOF‘
{
"registry-mirrors": ["https://e859w42o.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
3.常用命令
3.1 镜像命令
查看本地主机上的所有镜像
$ docker images [-a] [-q]
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 5 months ago 13.3kB
# 解释
REPOSITORY:镜像名称
TAG:镜像版本
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小
# 可选项
-a,--all:列出所有镜像
-q,--quiet:只显示镜像ID
搜索镜像
镜像搜索网址:https://hub.docker.com/
$ docker search imagename
# 搜索mysql
$ docker search mysql [--limit]
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 9574 [OK]
mariadb MariaDB is a community-developed fork of MyS… 3478 [OK]
# 可选项
--limit 5:只显示前5条镜像
--filter=stars=3000:只显示stars大于3000的镜像
下载镜像
$ docker pull imagename[:tag]
# 下载mysql
$ docker pull mysql
Using default tag: latest #默认下载最新版
latest: Pulling from library/mysql
afb6ec6fdc1c: Pull complete #分层下载,它下载过以后,下载其他mysql镜像版本时重复的就不需要下载了
0bdc5971ba40: Pull complete
97ae94a2c729: Pull complete
f777521d340e: Pull complete
1393ff7fc871: Pull complete
a499b89994d9: Pull complete
7ebe8eefbafe: Pull complete
597069368ef1: Pull complete
ce39a5501878: Pull complete
7d545bca14bf: Pull complete
211e5bb2ae7b: Pull complete
5914e537c077: Pull complete
Digest: sha256:a31a277d8d39450220c722c1302a345c84206e7fd4cdb619e7face046e89031d
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest #mysql的真实地址
# 下载mysql5.7版本的,版本号必须是存在才可以下载,如果下载99.99版本肯定会报错找不到的
$ docker pull mysql:5.7
删除镜像
$ docker rmi -f IMAGE ID
# 根据镜像ID删除镜像
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7 a4fdfd462add 12 days ago 448MB
mysql latest 30f937e841c8 12 days ago 541MB
hello-world latest bf756fb1ae65 5 months ago 13.3kB
$ docker rmi -f a4fdfd462add
# 根据镜像ID删除多个镜像
docker rmi -f a4fdfd462add 30f937e841c8
# 删除全部镜像,意思就是先查询出来所有的ID,然后全部删除
$ docker rmi -f $(docker images -aq)
3.2 容器命令
说明:有了镜像才可以创建容器,下载一个centos镜像来学习
$ docker pull centos
新建容器并启动
$ docker run [可选项] imagename
# 可选项
--name : 容器名字
-d. : 以后台方式运行
-it : 进入容器
-p : 指定容器端口
-p 主机端口:容器端口(常用)
# 启动并进入容器
$ docker run -it centos
退出容器
# 退出并停止容器
$ exit
# 退出但不停止容器
Control + P + Q
查看容器状态
$ docker ps [-a] [-q]
# 查看当前运行的容器
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
64ac46420f91 centos "/bin/bash" 14 seconds ago Up 13 seconds vigorous_ishizaka
# 查看所有的容器
$ docker ps -a
# 查看所有的容器ID
$ docker ps -aq
删除容器
$ docker rm [-f] containerId
# 根据ID删除指定的容器
$ docker rm 64ac46420f91
# 删除全部容器
$ docker rm -f $(docker ps -aq)
# 可选项
-f :强制删除,运行中的容器不能直接删除,需要-f参数
启动和停止容器
docker start containerID #启动容器
docker restart containerID #重启容器
docker stop containerID #停止当前运行中的 容器
docker kill containerID #强制停止当前容器
3.3 其他命令
查看日志
$ docker logs [-t] [-f] [--tail num] containerID
# 可选项
-t : 显示时间戳
-f : 跟踪显示日志
--tail num:显示num行日志
# 跟踪查看全部日志
docker logs -tf containerID
查看当前容器的元数据信息
$ docker inspect containerID
进入容器
# 进入后开启一个新的终端
$ docker exec -it containerID /bin/bash
# 进入容器正在执行的终端
$ docker attach containerID
将容器中的文件拷贝到主机上
$ docker cp containerID:容器文件路径 主机路径
eq:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS
51c13cc979ed centos "/bin/bash" 4 minutes ago Up 1
# 1.进入容器
$ docker exec -it 51c13cc979ed /bin/bash
# 2.在容器创建一个文件
$ touch /home/test.java
# 3.退出容器
$ exit
# 4.将容器中的test.java拷贝到主机的/home下
$ docker cp 51c13cc979ed:/home/test /home
3.4 实践安装Nginx
# 1.搜索镜像
$ docker search nginx
# 2.下载nginx镜像
$ docker pull nginx
# 3.新建容器并启动
# -d:在后台启动
# --name:容器名字为nginx01
# -p:指定端口映射,在浏览器访问 http://ip:3344会映射到80端口
$ docker run -d --name nginx01 -p 3344:80 nginx
为什么需要端口映射呢?
首先外网可以访问Linux,而Linux无法直接访问Docker,需要进行一个端口映射才可以访问
原文:https://www.cnblogs.com/dingjn/p/13035095.html
内容总结
以上是互联网集市为您收集整理的Docker全部内容,希望文章能够帮你解决Docker所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。