赞
踩
之前在服务器配置一个应用的运行环境,要安装各种软件,就拿一个基本的工程项目的环境来说吧, Java/Tomcat/MySQL/JDBC驱动包等。安装和配置这些东西有多麻烦就不说了,它还不能跨平台。假如 我们是在 Windows 上安装的这些环境,到了 Linux 又得重新装。况且就算不跨操作系统,换另一台同 样操作系统的服务器,要移植应用也是非常麻烦的。
通过Docker镜像 ( images ) 将 应用程序所需要的系统环境,由下而上打包,达到应用程序跨平台间的无缝接轨运作。
Docker官网:Home - Docker
Docker中文网站:https://www.docker-cn.com
Docker Hub官网:Docker Hub (仓库)
比vm快的原因
1、docker有着比虚拟机更少的抽象层。由亍docker不需要Hypervisor实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利用率上docker将会在效率上有明显优势。
2、docker利用的是宿主机的内核,而不需要Guest OS。因此,当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。仍而避免引寻、加载操作系统内核返个比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载Guest OS,返个新建过程是分钟级别的。而docker由于直接利用宿主机的操作系统,则省略了返个过程,因此新建一个docker容器只需要几秒钟。
总结
说明centos6和centos7安装步骤不同,Docker 运行在 CentOS 7 上,要求系统为64位、系统内核版本为 3.10 以上
[root@izj6c22bffydfp7tlrbx7fz /]# uname -r 3.10.0-514.26.2.el7.x86_64 [root@izj6c22bffydfp7tlrbx7fz /]# 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" [root@izj6c22bffydfp7tlrbx7fz /]#
查看gcc如果提示未找到命令即表示没有安装,需要安装
yum -y install gcc yum -y install gcc-c++
卸载旧版本
yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
安装需要的软件包
yum install -y yum-utils
设置镜像仓库(说明安装docker不需要再opt或者其他目录下 直接在~下执行命令即可)
# 错误的地址 不要使用国外镜像地址 yum-config-manager --add-repohttps://download.docker.com/linux/centos/docker-ce.repo [Errno 14] curl TCP connection reset by peer [Errno 12] curl#35 - Timeout # 正确推荐使用国内的 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新yum软件包索引
yum makecache fast
安装 Docker CE(ce社区版本 ee是付费版本)
yum install docker-ce docker-ce-cli containerd.io 如果安装指定版本 使用以下命令 yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
启动docker 以及版本查看
systemctl start docker docker version
运行一个hello-world镜像并查看
docker run hello-world docker images
systemctl stop docker yum -y remove docker-ce docker-ce-cli containerd.io rm-rf /var/lib/docker
登录阿里云 找到容器镜像服务
选择对应的版本配置
执行命令上面的四条命令即可
启动hello-world
Docker是一个Client-Server结构的系统,Docker守护进程运行在主机上,然后通过Socket连接从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器。容器,是一个运行时环境,就是我们前面说到的集装箱。
docker version # 显示 Docker 版本信息。 docker info # 显示 Docker 系统信息,包括镜像和容器数。。 docker --help# 帮助
docker命令查看
地址
Reference documentation | Docker Documentation
docker images 可加参数选项 -a 、-q 、 -aq docker images -a docker images -a docker images -aq
docker search mysql 可加参数 --filter=stars=50:列出收藏数不小于指定值的镜像
docker pull mysql #不写tag,默认是latest docker pull mysql:5.7 #下载指定版本
docker rmi -f镜像id # 删除单个 docker rmi -f镜像名:tag 镜像名:tag # 删除多个 docker rmi -f$(docker images -qa) # 删除全部
说明:有镜像才能创建容器,我们这里使用 centos 的镜像来测试,就是虚拟一个 centos !
先下载镜像
docker pull centos
1、以镜像新建一个容器并启动 docker run [OPTIONS] IMAGE [COMMAND][ARG.. 可选参数 --name="Name"# 给容器指定一个名字 -d# 后台方式运行容器,并返回容器的id! -i# 以交互模式运行容器,通过和 -t 一起使用 -t# 给容器重新分配一个终端,通常和 -i 一起使用 -P# 随机端口映射(大写) -p# 指定端口映射,小写的时候一般可以有四种写法 ip:hostPort:containerPort ip::containerPort hostPort:containerPort (常用) 主机端口:容器端口 containerPor 如下已经启动了一个新的centos系统,使用centos进行用交互模式启动容器,在容器内执行/bin/bash命令! docker run -it centos /bin/bash 命令行已经切换到容器内 [root@8c070855da83 /]# ls bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
docker ps [OPTIONS]# 常用参数说明 -a# 列出当前所有正在运行的容器 + 历史运行过的容器 -l# 显示最近创建的容器 -n=? # 显示最近n个创建的容器 -q# 静默模式,只显示容器编号。
exit# 容器停止退出 ctrl+P+Q # 容器不停止退出
docker start (容器id or 容器名) # 启动容器 docker restart (容器id or 容器名) # 重启容器 docker stop (容器id or 容器名) # 停止容器 docker kill (容器id or 容器名) # 强制停止容器
docker rm容器id # 删除指定容器 docker rm-f$(docker ps -a -q) # 删除所有容器 docker ps-a-q|xargs docker rm # 删除所有容器
# 命令 docker run -d容器名 # 例子 docker run -d centos # 启动centos,使用后台方式启动 # 问题:使用docker ps 查看,发现容器已经退出了! # 解释:Docker容器后台运行,就必须有一个前台进程,容器运行的命令如果不是那些一直挂起的命令,就会自动退出。# 比如,你运行了nginx服务,但是docker前台没有运行应用,这种情况下,容器启动后,会立即自杀,因为他觉得没有程序了,所以最好的情况是,将你的应用使用前台进程的方式运行启动。
docker logs -f-t--tail容器id -t 显示时间戳 -f 打印最新的日志 --tail 数字显示多少条! 如 docker logs -tf --tail 10 c8530dbbe3b
# 命令 docker top容器id # 测试 [root@root ~]# docker top c8530dbbe3
# 命令1 docker exec -it容器id bashShell 测试 docker exec -it c8530dbbe3b4 /bin/bash # 命令2 docker attach 容器id 测试 docker attach -it c8530dbbe3b4 /bin/bash # 区别 # exec 是在容器中打开新的终端,并且可以启动新的进程 # attach 直接进入容器启动命令的终端,不会启动新的进程
docker cp容器id:容器内路径目的主机路径 测试 docker cp c8530dbbe3b4:/home/f1 /home
docker stats 容器id
某个镜像的使用方法可以直接在dockerhub里面搜索查看
1、搜索镜像 docker search nginx --filter=stars=3000 2、拉取镜像 docker pull nginx 3、以镜像nginx新建后台启动容器 并且容器名定义为nginx01(默认nginx) 并且映射主机端口为3999 docker run -d --name nginx01 -p 3999:80 nginx 3、测试访问 curl localhost:3999 5、进入容器 [root@izj6c22bffydfp7tlrbx7fz /]# docker exec -it nginx01 /bin/bash root@4384a8501bb0:/# whereis nginx 寻找nginx nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx root@4384a8501bb0:/#
# 1、下载tomcat镜像 docker pull tomcat# 2、启动 docker run -d-p8080:8080 --name tomcat9 tomcat # 3、进入 tomcatdocker exec -it tomcat9 /bin/bash# 4、思考:我们以后要部署项目,还需要进入容器中,是不是十分麻烦,要是有一种技术,可以将容器内和我们Linux进行映射挂载就好了?我们后面会将数据卷技术来进行挂载操作,也是一个核心内容,这里大家先听听名词就好,我们很快就会讲到!
# 我们启动es这种容器需要考虑几个问题1、端口暴露问题9200、93002、数据卷的挂载问题 data、plugins、conf3、吃内存-"ES_JAVA_OPTS=-Xms512m -Xmx512m"# 扩展命令docker stats 容器id # 查看容器的cpu内存和网络状态# 1、启动es测试docker run -d--name elasticsearch -p9200:9200 -p9300:9300 -e"discovery.type=single-node" elasticsearch:7.6.2# 2、启动之后很卡,使用 docker stats 容器id 查看下cpu状态,发现占用的很大CONTAINER ID NAME CPU % MEM USAGE /LIMIT MEM % 249ae46da625 elasticsearch 0.00% 1.036GiB /1.716GiB 60.37% # 3、测试访问[root@kuangshen data]# curl localhost:9200{"name" : "249ae46da625","cluster_name" : "docker-cluster","cluster_uuid" : "_Ho_i4fOTUesNc_II35sSA","version" : {"number" : "7.6.2","build_flavor" : "default","build_type" : "docker","build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f","build_date" : "2020-03-26T06:34:37.794943Z",
持续集成和发布的时候用
#安装rancher-server docker run --name rancher-server -p 8000:8080 -v /etc/localtime:/etc/localtime:ro -d rancher/server #安装agent docker run --rm --privileged -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/rancher:/var/lib/rancher rancher/agent:v1.2.11 http://39.101.191.131:8000/v1/scripts/D3DBD43F263109BB881F:1577750400000:7M0y BzCw4XSxJklD7TpysYIpI
Portainer是Docker的图形化管理工具,提供状态显示面板、应用模板快速部署、容器镜像网络数据卷 的基本操作(包括上传下载镜像,创建容器等操作)、事件日志显示、容器控制台操作、Swarm集群和 服务等集中管理和操作、登录用户管理和控制等功能。功能十分全面,基本能满足中小型单位对容器管 理的全部需求。
如果仅有一个docker宿主机,则可使用单机版运行,Portainer单机版运行十分简单,只需要一条语句即 可启动容器,来管理该机器上的docker镜像、容器等数据。
docker run -d -p 8088:9000 \ --restart=always -v /var/run/docker.sock:/var/run/docker.sock -- privileged=true portainer/portainer
访问方式:http://IP:8088
首次登陆需要注册用户,给admin用户设置密码
单机版这里选择local即可,选择完毕,点击Connect即可连接到本地docker:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。