docker入门一:docker安装、基本命令和redis操作示例
环境:
- centos8.2 最小化安装
- docker
一、docker概念
官网:https://www.docker.com/
Github Docker 源码:https://github.com/docker/docker-ce
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),我们用社区版就可以了。
参照:Docker 教程
二、docker安装
2.1 安装依赖
首先,安装gcc和gcc-c++:
yum -y install gcc
yum -y install gcc-c++
然后,安装其他依赖:
yum install -y yum-utils device-mapper-persistent-data lvm2
2.2 安装docker
首先,配置docker仓库地址:
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
然后,在安装之前,我们可以先搜索一下docker软件包:
[root@bogon ~]# yum list docker-ce.x86_64 --showduplicates | sort -r
docker-ce.x86_64 3:20.10.6-3.el8 docker-ce-stable
docker-ce.x86_64 3:20.10.5-3.el8 docker-ce-stable
docker-ce.x86_64 3:20.10.4-3.el8 docker-ce-stable
docker-ce.x86_64 3:20.10.3-3.el8 docker-ce-stable
docker-ce.x86_64 3:20.10.2-3.el8 docker-ce-stable
docker-ce.x86_64 3:20.10.1-3.el8 docker-ce-stable
docker-ce.x86_64 3:20.10.0-3.el8 docker-ce-stable
docker-ce.x86_64 3:19.03.15-3.el8 docker-ce-stable
docker-ce.x86_64 3:19.03.14-3.el8 docker-ce-stable
docker-ce.x86_64 3:19.03.13-3.el8 docker-ce-stable
Docker CE Stable - x86_64 2.8 kB/s | 12 kB 00:04
上次元数据过期检查:0:00:02 前,执行于 2021年05月12日 星期三 08时38分18秒。
可安装的软件包
[root@bogon ~]#
最后,直接安装最新的docker-ce即可: yum -y install docker-ce
[root@bogon ~]# yum -y install docker-ce
上次元数据过期检查:0:01:08 前,执行于 2021年05月12日 星期三 08时38分18秒。
依赖关系解决。
=============================================================================================================================================================================================软件包 架构 版本 仓库 大小
=============================================================================================================================================================================================
安装:docker-ce x86_64 3:20.10.6-3.el8 docker-ce-stable 27 M
升级:libsemanage x86_64 2.9-3.el8 BaseOS 165 k
安装依赖关系:checkpolicy x86_64 2.9-1.el8 BaseOS 348 k
...tar x86_64 2:1.30-5.el8 BaseOS 838 k
启用模块流:container-tools rhel8 事务概要
=============================================================================================================================================================================================
安装 20 软件包
升级 1 软件包总下载:112 M
下载软件包:
(1/21): container-selinux-2.155.0-1.module_el8.3.0+699+d61d9c41.noarch.rpm 208 kB/s | 51 kB 00:00
...
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
总计 3.1 MB/s | 112 MB 00:36
警告:/var/cache/dnf/docker-ce-stable-fa9dc42ab4cec2f4/packages/containerd.io-1.4.4-3.1.el8.x86_64.rpm: 头V4 RSA/SHA512 Signature, 密钥 ID 621e9f35: NOKEY
Docker CE Stable - x86_64 2.6 kB/s | 1.6 kB 00:00
导入 GPG 公钥 0x621E9F35:Userid: "Docker Release (CE rpm) <docker@docker.com>"指纹: 060A 61C5 1B55 8A7F 742B 77AA C52F EB6B 621E 9F35来自: https://download.docker.com/linux/centos/gpg
导入公钥成功
运行事务检查
事务检查成功。
运行事务测试
事务测试成功。
运行事务准备中 : 1/1 安装 : docker-scan-plugin-0.7.0-3.el8.x86_64 ...已升级:libsemanage-2.9-3.el8.x86_64 已安装:checkpolicy-2.9-1.el8.x86_64 container-selinux-2:2.155.0-1.module_el8.3.0+699+d61d9c41.noarch containerd.io-1.4.4-3.1.el8.x86_64 docker-ce-3:20.10.6-3.el8.x86_64 docker-ce-cli-1:20.10.6-3.el8.x86_64 docker-ce-rootless-extras-20.10.6-3.el8.x86_64 docker-scan-plugin-0.7.0-3.el8.x86_64 fuse-common-3.2.1-12.el8.x86_64 fuse-overlayfs-1.3.0-2.module_el8.3.0+699+d61d9c41.x86_64 fuse3-3.2.1-12.el8.x86_64 fuse3-libs-3.2.1-12.el8.x86_64 libcgroup-0.41-19.el8.x86_64 libslirp-4.3.1-1.module_el8.3.0+475+c50ce30b.x86_64 policycoreutils-python-utils-2.9-9.el8.noarch python3-audit-3.0-0.17.20191104git1c2f876.el8.x86_64 python3-libsemanage-2.9-3.el8.x86_64 python3-policycoreutils-2.9-9.el8.noarch python3-setools-4.3.0-2.el8.x86_64 slirp4netns-1.1.8-1.module_el8.3.0+699+d61d9c41.x86_64 tar-2:1.30-5.el8.x86_64 完毕!
[root@bogon ~]#
2.3 启动docker
systemctl start docker
# 或
systemctl start docker.service
注意: 如果没有启动docker就运行docker命令,可能会提示: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
另附常用命令:
# 启动docker服务
systemctl stop docker.service
# 重启docker服务
systemctl restart docker.service
2.4 查看docker安装的版本:
[root@bogon ~]# clear
[root@bogon ~]# docker --version
Docker version 20.10.6, build 370c289
[root@bogon ~]# docker version
Client: Docker Engine - CommunityVersion: 20.10.6API version: 1.41Go version: go1.13.15Git commit: 370c289Built: Fri Apr 9 22:44:36 2021OS/Arch: linux/amd64Context: defaultExperimental: trueServer: Docker Engine - CommunityEngine:Version: 20.10.6API version: 1.41 (minimum version 1.12)Go version: go1.13.15Git commit: 8728dd2Built: Fri Apr 9 22:43:02 2021OS/Arch: linux/amd64Experimental: falsecontainerd:Version: 1.4.4GitCommit: 05f951a3781f4f2c1911b05e61c160e9c30eaa8erunc:Version: 1.0.0-rc93GitCommit: 12644e614e25b05da6fd08a38ffa0cfe1903fdecdocker-init:Version: 0.19.0GitCommit: de40ad0
[root@bogon ~]#
三、Docker镜像、容器和仓库
DockerHub地址:https://hub.docker.com/
镜像:类似于操作系统中安装的软件(存在于硬盘中,未运行)。
容器:类似于操作系统中的进程(从安装的软件运行)。
注意:它是一个虚拟化的沙箱,如果容器里运行了一个redis,我们运行时需要手动将redis的对外接口暴露出去,这样外面才能访问。还有,对于每个容器它都有自己的localhost和127.0.0.1,所以在涉及ip地址时要格外小心。
仓库:docker为了方便大家共享打包好的镜像,搞了一个hub,类似于java中的maven、js中的npm、.net中的nuget。
我们不仅可以从里面拉取别人已经打包好的镜像,还可以自己注册账号上传。
当然,我们也可以仅本地打包镜像自己用,不上传到hub,并且从hub上拉取的镜像会被缓存到本地。
镜像的版本控制:
每个镜像都有一个tag来标识镜像的版本,这样我们安装时就可以指定特别版本的镜像。不过,遗憾的是,docker的搜索结果中并没有显示tag(后面自己写脚本实现)。
下面以redis为例,说下docker命令的使用:
3.1 从DockerHub中搜索可用的Redis镜像:docker search redis
[root@bogon ~]# docker search redis
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
redis Redis is an open source key-value store that… 9417 [OK]
bitnami/redis Bitnami Redis Docker Image 178 [OK]
sameersbn/redis 83 [OK]
grokzen/redis-cluster Redis cluster 3.0, 3.2, 4.0, 5.0, 6.0, 6.2 78
rediscommander/redis-commander Alpine image for redis-commander - Redis man… 58 [OK]
redislabs/redisearch Redis With the RedisSearch module pre-loaded… 34
redislabs/redisinsight RedisInsight - The GUI for Redis 30
redislabs/redis Clustered in-memory database engine compatib… 29
oliver006/redis_exporter Prometheus Exporter for Redis Metrics. Supp… 25
redislabs/rejson RedisJSON - Enhanced JSON data type processi… 23
arm32v7/redis Redis is an open source key-value store that… 23
bitnami/redis-sentinel Bitnami Docker Image for Redis Sentinel 21 [OK]
redislabs/redisgraph A graph database module for Redis 15 [OK]
redislabs/redismod An automated build of redismod - latest Redi… 12 [OK]
arm64v8/redis Redis is an open source key-value store that… 12
webhippie/redis Docker images for Redis 11 [OK]
insready/redis-stat Docker image for the real-time Redis monitor… 10 [OK]
s7anley/redis-sentinel-docker Redis Sentinel 10 [OK]
circleci/redis CircleCI images for Redis 7 [OK]
centos/redis-32-centos7 Redis in-memory data structure store, used a… 5
clearlinux/redis Redis key-value data structure server with t… 3
tiredofit/redis Redis Server w/ Zabbix monitoring and S6 Ove… 1 [OK]
wodby/redis Redis container image with orchestration 1 [OK]
runnable/redis-stunnel stunnel to redis provided by linking contain… 1 [OK]
xetamus/redis-resource forked redis-resource 0 [OK]
[root@bogon ~]#
3.2 查看redis官方镜像的版本
上面搜索的结果中有一个官方的镜像:“redis”,但是没有显示tag列表,下面我们自己制作脚本实现:
- 在目录
/bin
目录下创建文件docker-search-show-tag.sh
,内容如下:#!/bin/sh # # Simple script that will display docker repository tags. # # Usage: # $ docker-show-repo-tags.sh ubuntu centos for Repo in $* ; docurl -s -S "https://registry.hub.docker.com/v2/repositories/library/$Repo/tags/" | \sed -e 's/,/,\n/g' -e 's/\[/\[\n/g' | \grep '"name"' | \awk -F\" '{print $4;}' | \sort -fu | \sed -e "s/^/${Repo}:/" done
- 赋予这个脚本可执行权限:
chmod 744 /bin/docker-search-show-tag.sh
[root@bogon ~]# chmod 744 /bin/docker-search-show-tag.sh
使用上面的脚本,展示镜像redis
的所有版本:
[root@bogon ~]# docker-search-show-tag.sh redis
redis:6.0
redis:6.0-buster
redis:6.0.13
redis:6.0.13-buster
redis:6.2
redis:6.2-buster
redis:6.2.3
redis:6.2.3-buster
redis:buster
redis:latest
[root@bogon ~]#
上面列出了很多tag(版本),注意到:里面有个latest,从字面上里面这个版本应该是代表最新的,而事实上这个标签也是一个普通的标签,只不过名字有点特殊(注意:一旦下载到本地,它就属于本地了,不会在每次运行时从远程自动更新。。。)。
另外,大家都约定这个版本的镜像应该始终保持最新,所以我们可以拉取、手动更新这个版本来让我们的程序保持最新;
3.3 安装redis镜像 & 查看本地已存在的镜像
安装最新的redis镜像:docker pull redis
安装指定版本的镜像:docker pull redis:6.0
安装最新的redis镜像时如下:
[root@bogon ~]# docker pull redis
Using default tag: latestlatest: Pulling from library/redis
f7ec5a41d630: Pull complete
a36224ca8bbd: Pull complete
7630ad34dcb2: Pull complete
e74b2f747260: Pull complete
ebc61c7bf222: Pull complete
1aafd9c07208: Pull complete
Digest: sha256:6cddb3822e19f09a6a369c35680562ddd2e44bd3bfd6fe25ec6456c42f45728b
Status: Downloaded newer image for redis:latest
docker.io/library/redis:latest
[root@bogon ~]#
可以看到,由于没有指定安装的tag,docker-cli会有一个确认的过程,直接回车即可。
安装好后,运行docker images
查看本地的镜像列表:
[root@bogon ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
redis latest ccee4cdf984f 8 days ago 105MB
[root@bogon ~]#
上面显示我们已安装了redis最新版本,但这个版本具体是redis哪个版本呢?我们可以使用如下命令:
[root@bogon ~]# docker image inspect redis:latest | grep -i version"GOSU_VERSION=1.12","REDIS_VERSION=6.2.3","DockerVersion": "19.03.12","GOSU_VERSION=1.12","REDIS_VERSION=6.2.3",
[root@bogon ~]#
我们可以知道,当前下载的lastest版本的redis其实就是6.2.3版本的。
当然,我们可以下载时手动指定镜像版本:
[root@bogon ~]# docker pull redis:6.0
6.0: Pulling from library/redis
f7ec5a41d630: Already exists
a36224ca8bbd: Already exists
7630ad34dcb2: Already exists
b794377c17d4: Pull complete
a134ee7a12b3: Pull complete
ab302c2d25fc: Pull complete
Digest: sha256:dee031783fcbe8b5d9056303091043f1023853d73dfd3a83c7802c5038ad6f84
Status: Downloaded newer image for redis:6.0
docker.io/library/redis:6.0
[root@bogon ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
redis 6.0 3038fc9615f1 8 days ago 104MB
redis latest ccee4cdf984f 8 days ago 105MB
[root@bogon ~]#
3.4 运行redis容器
执行如下命令,将redis跑起来:docker run -it --name="redistest" -p 6379:6379 redis:6.0
运行后,我们就可以从外面访问它了(linux为虚拟机,本地物理机为:window10):
上面的命令可以让我们以阻塞的方式运行redis,但更多的时候我们是想以后台方式运行redis,重新运行以下命令:
[root@bogon ~]# docker run -d --name="redistest2" -p 16379:6379 redis:6.0
2420c44f4576cd9d66980b2eb7a3cdba39a0413353e07a0e9c09299145a498d5
[root@bogon ~]#
上面命令执行完成后,返回的是redis容器id。
我们再用redis客户端连接下:
3.5 redis容器的启动、停止 & 查看redis容器
查看正在运行的容器命令:docker ps
[root@bogon ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2420c44f4576 redis:6.0 "docker-entrypoint.s…" 3 minutes ago Up 3 minutes 0.0.0.0:16379->6379/tcp, :::16379->6379/tcp redistest2
d7fa06746181 redis:6.0 "docker-entrypoint.s…" 9 minutes ago Up 9 minutes 0.0.0.0:6379->6379/tcp, :::6379->6379/tcp redistest
[root@bogon ~]#
如果想暂停某个容器(redistest),可以使用如下命令:
[root@bogon ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2420c44f4576 redis:6.0 "docker-entrypoint.s…" 3 minutes ago Up 3 minutes 0.0.0.0:16379->6379/tcp, :::16379->6379/tcp redistest2
d7fa06746181 redis:6.0 "docker-entrypoint.s…" 9 minutes ago Up 9 minutes 0.0.0.0:6379->6379/tcp, :::6379->6379/tcp redistest
[root@bogon ~]# docker stop redistest
redistest
[root@bogon ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2420c44f4576 redis:6.0 "docker-entrypoint.s…" 5 minutes ago Up 5 minutes 0.0.0.0:16379->6379/tcp, :::16379->6379/tcp redistest2
[root@bogon ~]#
如果我们想查看所有的容器(包括停止和运行的),如下:
[root@bogon ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2420c44f4576 redis:6.0 "docker-entrypoint.s…" 6 minutes ago Up 6 minutes 0.0.0.0:16379->6379/tcp, :::16379->6379/tcp redistest2
d7fa06746181 redis:6.0 "docker-entrypoint.s…" 12 minutes ago Exited (0) About a minute ago redistest
[root@bogon ~]#
上面显示的Exited (0) About a minute ago
就表示redistest
容器已经于1分钟前停止运行了。
我们可以使用如下命令将它重新运行:
[root@bogon ~]# docker start redistest
redistest
[root@bogon ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2420c44f4576 redis:6.0 "docker-entrypoint.s…" 8 minutes ago Up 8 minutes 0.0.0.0:16379->6379/tcp, :::16379->6379/tcp redistest2
d7fa06746181 redis:6.0 "docker-entrypoint.s…" 14 minutes ago Up 2 seconds 0.0.0.0:6379->6379/tcp, :::6379->6379/tcp redistest
[root@bogon ~]#
关于docker run命令:
上面docker run命令常用的参数
-it
:表示以交互方式运行容器(临时用,一般使用后台运行方式);
-d
:表示以后台方式运行容器;
--name
:运行的容器名称,
如:
docker run -it --name="redistest" -p 6379:6379 redis
表示运行后的容器名称为redistest
。
-p
:表示对外暴露的接口,
如:
docker run -it --name="redistest" -p 16379:6379 redis
表示容器运行后,将内部程序的6379
端口以16379
对外提供。
如果有多个端口,如下:-p 16379:6379 -p 80:80
。
如果想暴露连续的端口,如下:-p 9600-9700:9600-9700
,参考:https://www.cnblogs.com/zhzhlong/p/12581934.html
-e
:表示容器的环境变量,
如,运行asp.net core程序时,我们想指定运行的环境为
Development
,那么可以使用如下命令:
docker -e "ASPNETCORE_ENVIRONMENT=FatA" -d --name="coreweb" -p 5000:5000 coreweb
如果有多个环境变量,如下:
docker -e "ASPNETCORE_ENVIRONMENT=FatA" -e "env_test=tag" -d --name="coreweb" -p 5000:5000 coreweb
-v
: 给容器挂载存储卷,挂载到容器的某个目录,
如,我们可以使用此参数手动指定docker容器内的时区设置,如下:
docker -e "ASPNETCORE_ENVIRONMENT=FatA" -v /etc/localtime:/etc/localtime -d --name="coreweb" -p 5000:5000 coreweb
上面的命令,我们指定docker容器中的时区使用linux机器的时区设置。
3.6 移除镜像和容器
移除镜像:
docker rmi redis:6.0
移除之前,我们必须首先移除这个镜像的所有实例(容器),包括正在运行的和已经停止的。
移除容器:
docker rmi redistest
移除之前,我们必须先停止此容器。
移除已经停止的容器:
docker container prune
docker入门一:docker安装、基本命令和redis操作示例相关推荐
- 尚硅谷大数据技术Zookeeper教程-笔记01【Zookeeper(入门、本地安装、集群操作)】
视频地址:[尚硅谷]大数据技术之Zookeeper 3.5.7版本教程_哔哩哔哩_bilibili 尚硅谷大数据技术Zookeeper教程-笔记01[Zookeeper(入门.本地安装.集群操作)] ...
- Docker入门之 - 如何安装Docker CE
本文将介绍如何在Ubantu.CentOS.Windows.Mac上安装Docker Docker 提供了两个版本:社区版 (CE) 和企业版 (EE). Docker 社区版 (CE) 是开发人员和 ...
- 【Docker 入门】Docker简介与安装
Docker Desktop for Windows 目录: Docker Desktop for Windows 1. Docker简介: 2. Docker应用场景: 3. Docker对比虚拟机 ...
- [转]docker入门(利用docker部署web应用)
前言:本课程是在慕课网上学习 第一个docker化的java应用 课程时所做的笔记,供本人复习之用 目录 第一章 什么是docker 1.1 docker的发展史 1.2 docker国内应用史 1. ...
- docker入门(利用docker部署web应用)
更新:随手写的一篇博客能收获这么多赞真是挺开心的,不过现在博主很忙,博主本人主要也是从事Java方向对docker暂时没有更深的理解了,写这个目的也是为了自己复习,恕不能对出现问题的同学进行答疑了,当 ...
- Docker入门-搭建docker私有仓库
Docker Hub 目前Docker官方维护了一个公共仓库Docker Hub,其中已经包括了数量超过15000个镜像.大部分需求都可以通过在Docker Hub中直接下载镜像来使用. 注册登录 可 ...
- 3.8 Docker最新入门教程-Docker入门-使用 Docker Compose
3.8 使用 Docker Compose Docker Compose是一种旨在帮助定义和共享多容器应用程序的工具.使用 Compose,我们可以创建一个 YAML 文件来定义服务,并使用一个命令, ...
- Docker入门之Docker Swarm
一 Docker Swarm简介 Swarm 在 Docker 1.12 版本之前属于一个独立的项目,在 Docker 1.12 版本发布之后,该项目合并到了 Docker 中,成为 Docker 的 ...
- 【docker入门】docker入门
docker简介: 什么是容器? 一种虚拟化的方案,虚拟化操作系统 只能运行相同或相似内核的操作系统 依赖于linux内核特性:Namespace和Cgroups 什么是docker? 将开发的应用程 ...
最新文章
- 【机器学习】梯度下降的Python实现
- mysql的二级分区_分布式数据库一级分区和二级分区
- 给opentaps添加定制的表和字段
- 浅谈Taro和Apollo在开发过程中的实践
- centos 最简单的服务程序
- linux搭建nfs
- leetcode-22-括号生成
- Java并发编程实战读书笔记(1)
- python3安装pillow后报错没有pillow模块以及没有PIL模块问题解决
- AForge.Video.FFMPEG桌面录屏
- vs2012 链接内置数据库 sql express 出现error 26 解决方法
- flashfxp和任务计划自动定时ftp备份
- Matlab画堆叠柱状图(颜色设置,x轴外部标注,y轴标注,颜色设置)
- git cherry-pick 的时候出现git cherry-pick xxx fatal: bad object xxx
- oracle使用with递归查询
- 网络运维与安全岗位月薪2.5w,您还不知道的前景!
- 高速的二舍八入三七作五_详解青银高速市区段计费方法人工车道比ETC贵3元
- 亚马逊云科技在中国市场火了?真相令人想不到
- SQL——MySQL Driver
- [转]中国将建口径8米巨型太阳望远镜
热门文章
- 功率谱密度(功率信号)、能量谱密度(能量信号)详解
- 啡鸟集:八大咖啡馆文化魅力都市,打卡圣地
- 分布式锁-常用的4种方案
- 云服务器系统租赁费用,云服务器租赁费用
- 创成汇平台江苏运营中心与宜兴创成汇公司正式揭牌!
- Netty源码(十五):Recycler工具类
- 简历python技能怎么写_游戏测试简历专业技能怎么写
- 10月2日科技资讯|余承东:华为6G研发需10年;库克“iPhone 11势头强劲”;TensorFlow 2.0正式版发布
- 4 Python数据分析 淘宝母婴用品数据分析案例
- 粒子群算法(PSO)详解