专栏首页eclipse编程人均年薪50万以上,docker到底是什么?为什么这么火?

人均年薪50万以上,docker到底是什么?为什么这么火?

为什么要使用Docker

场景一:公司双十一买了一堆服务器,技术总监让你给它们一个个都配置上JDK、Mysql、Redis等软件环境。

你心里小声嘀咕:“这总监不讲武德!“然后你开始一个个去安装、配置,结果搞了一天都没有配置好。

到了晚上10点,总监对你说:“你到底行不行?我劝你好自为之!“

场景二: 你和公司同事共用一台服务器进行开发,中间突然你俩的程序都挂了。

同事很恼火,拿着键盘指着你说:“怪不得总监昨晚劝你好自为之,我看你就是不行!”

你一听不行,脑子就炸了!“男人不能说不行啊!“你上去就给了他一拳。

那么有了Docker以后,以上两个场景会变成怎样?

场景一变为:你在Docker Hub(镜像仓库)上下载了这些软件的镜像,然后

在容器里通过 docker run这个简单的命令一个个运行它们,不到5分钟你就全部配置好了。

总监对你连连点头:“小伙子不错嘛,也是一个老Docker了!“

场景二变为:你和同事的程序分别运行在两个互不干扰的容器里,即便同事的程序挂了,你的程序依然毫发无损。同事从此对你刮目相看。

01

什么是Docker

1. Docker的英文解释是:容器。你可以把它想象为运输船上的集装箱,它们互相隔离、互不干扰。

Docker官网的图标是一个鲸鱼身上有一堆小箱子,这些小箱子就是容器。

到这里你可能想问?为什么你一直在说容器?为什么容器技术越来越重要?为什么Docker这么火?

“因为Docker它超级轻啊!“

在容器技术之前,业内用的最多的就是虚拟机技术,其中虚拟技术的代表就是VMware。

那么什么是虚拟技术?其实就是在你的电脑上先安装一个软件例如VMware,然后再在这个软件上安装一堆“子电脑”,这些“子电脑”就是虚拟机,它们一般常用的是CentOS。

在这些子电脑上,你可以运行eclipse、网易云音乐等各种软件。你还可以在一台虚拟机上用navicat连接另外一台虚拟机上的Mysql。

想必各位在大学里面学习Linux这门课的时候,都学过怎样在电脑上装Linux系统。

首先是在你的电脑上装VMware,事先老师可能给你们找了一个绿色破解版的,所以装起来并不是很难。

但是等到装CentOS的时候,有的同学就崩溃了,一节课一个班里可能最多只有一半人装成功了,有的甚至到大学毕业了还没有成功过。

虚拟机技术虽然可以在一台真实的电脑上通过一个软件装一堆虚拟的“子电脑”,但是它安装起来太麻烦了,而且启动起来超级超级慢,最重要的是特别卡,很占内存。关键时刻,容器技术的主角Docker闪亮登场。

首先我们来看一张虚拟机技术和Docker容器技术的对比图

图片来自网络

由上图可知:就是因为Docker启动超级快,占用内存超级低,所以它才会越来越受欢迎。

2. Docker的核心

镜像:一个镜像代表一个应用环境,他是一个只读的文件,如 mysql镜像等。

容器:镜像每次运行之后就是产生一个容器,就是正在运行的镜像,运行镜像其实就是安装软件。

仓库:用来存放镜像的位置,类似于maven仓库,也是镜像下载和上传的位置。

举个例子:

在很久之前程序员开发完一个软件只能通过开发工具把软件安装在手机上,且不说软件安装起来有多麻烦,有的手机还不兼容,大多数人都不能共享这个软件。

结果有一天有一个牛人搞了一个应用商店,所有的程序员只要遵守一定的规范,他们都可以把自己开发的软件打包发布到应用商店上。然后所有人都可以在这个应用商店上下载软件。

在刚才的例子里,所有的程序员打包发布的软件就是“Docker镜像”,而应用商店就是Docker的仓库。我们在手机上运行的软件就是Docker容器。

说白了就是所有人都可以发布Docker镜像到Docker仓库里,都可以从Docker仓库里下载别人发布的镜像,然后将这些镜像一运行就成为了一个Docker容器。这个Docker容器里面是一个配置好的软件环境。

02

安装Docker

1. 卸载之前的Docker

yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

安装Docker依赖

yum install -y yum-utils device-mapper-persistent-data lvm2

设置docker的yum源

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

安装最新版本的的Docker

sudo yum install docker-ce docker-ce-cli containerd.io

安装完成之后查看Docker的版本:docker version

[root@eclipse ~]# docker version
Client: Docker Engine - Community
 Version: 20.10.0
 API version: 1.41
 Go version: go1.13.15
 Git commit:        7287ab3
 Built:             Tue Dec 8 18:57:35 2020
 OS/Arch: linux/amd64
 Context:           default
 Experimental:      true
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

因为Docker镜像仓库的服务器在国外,由于网络等一些其他原因我们访问起来会比较慢,所以这里需要配置docker的阿里云镜像加速服务

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://lz2nib3q.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload

然后重启Docker

sudo systemctl restart docker

配置完之后查看docker的阿里云镜像是否生效

[root@eclipse ~]# docker info
Client:
 Context: default
 Debug Mode: false 
 Experimental: false
 Insecure Registries:
.....................
  127.0.0.0/8
 Registry Mirrors:
  https://lz2nib3q.mirror.aliyuncs.com/
 Live Restore Enabled: false

03

Docker常用命令

Docker常用命令主要包含镜像命令、容器命令以及进入容器内部与软件环境的交互命令。

1 镜像命令

1.1查看所有镜像 docker images -a 列出所有镜像 -q 只显示镜像id

[root@eclipse ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest f35646e83998 8 weeks ago 133MB

1.2搜索镜像 docker search 镜像名

[root@eclipse ~]# docker search redis
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
redis Redis is an open source key-value store that… 8843      [OK]
bitnami/redis Bitnami Redis Docker Image 168                  [OK]
sameersbn/redis 82                   [OK]
grokzen/redis-cluster Redis cluster 3.0, 3.2, 4.0, 5.0, 6.0           72
rediscommander/redis-commander Alpine image for redis-commander - Redis man… 48                   [OK]

1.3.从仓库下载镜像

docker pull 镜像名

[root@eclipse ~]# docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql
852e50cd189d: Pull complete
29969ddb0ffb: Pull complete
a43f41a44c48: Pull complete
5cdd802543a3: Pull complete
b79b040de953: Pull complete
938c64119969: Pull complete
7689ec51a0d9: Pull complete
a880ba7c411f: Pull complete
984f656ec6ca: Pull complete
9f497bce458a: Pull complete
b9940f97694b: Pull complete
2f069358dc96: Pull complete
Digest: sha256:4bb2e81a40e9d0d59bd8e3dc2ba5e1f2197696f6de39a91e90798dd27299b093
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest

1.4.删除镜像 docker rmi 镜像名 -f 强制删除

[root@eclipse ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql latest dd7265748b5d 2 weeks ago 545MB
nginx latest f35646e83998 8 weeks ago 133MB
[root@eclipse ~]# docker rmi -f mysql

2 容器命令

2.1运行容器 docker run 镜像名 --name 为容器起一个别名 -d 在后台启动容器 -p 对外暴露端口号:容器端口号

[root@eclipse ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql latest dd7265748b5d 2 weeks ago 545MB
nginx latest f35646e83998 8 weeks ago 133MB
[root@eclipse ~]# docker run -d -p 3306:3306 mysql

2.2查看运行的容器 docker ps -a 正在运行的以及历史运行过的容器 -q 只显示容器编号

[root@eclipse ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@eclipse ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
10fddd372a62 mysql "docker-entrypoint.s…"   6 minutes ago Exited (1) 6 minutes ago strange_maxwell
844ff32beda2 42a1947ab396 "/docker-entrypoint.…" 6 weeks ago Exited (0) 5 weeks ago inspiring_ishizaka
cb5814efd6da nginx "/docker-entrypoint.…" 6 weeks ago Exited (0) 6 weeks ago frosty_keller
[root@eclipse ~]# docker ps -a -q
10fddd372a62
844ff32beda2
cb5814efd6da
[root@eclipse ~]#

2.3开启|重启|停止容器

docker start 容器名或者容器id  --------------- 开启容器
docker restart 容器名或者容器id    --------------- 重启容器
docker stop 容器名或者容器id       ------------------ 停止容器运行
docker kill 容器名或者容器id      ------------------ 立即停止容器运行
[root@eclipse ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8634a3f49298 nginx "/docker-entrypoint.…"   22 seconds ago Up 22 seconds 0.0.0.0:80->80/tcp admiring_taussig
[root@eclipse ~]# docker stop 863
863
[root@eclipse ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@eclipse ~]# docker start 863
863
[root@eclipse ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8634a3f49298 nginx "/docker-entrypoint.…"   52 seconds ago Up 3 seconds 0.0.0.0:80->80/tcp admiring_taussig
[root@eclipse ~]#

2.4删除容器 docker rm -f 容器id或者容器名

[root@eclipse ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8634a3f49298 nginx "/docker-entrypoint.…"   2 minutes ago Up About a minute 0.0.0.0:80->80/tcp admiring_taussig
[root@eclipse ~]# docker rm -f 863
863
[root@eclipse ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@eclipse ~]#

2.5查看容器内进程 docker top 容器id或者容器名

[root@eclipse ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cb5814efd6da nginx "/docker-entrypoint.…"   6 weeks ago Up 29 seconds 80/tcp frosty_keller
[root@eclipse ~]# docker top cb5
UID PID PPID C STIME TTY TIME CMD
root 11243               11223               0                   22:21               ? 00:00:00            nginx: master process nginx -g daemon off;
101                 11288               11243               0                   22:21               ? 00:00:00            nginx: worker process
[root@eclipse ~]#

2.6查看容器的运行日志 docker logs 容器id或容器名

-t 引入时间戳 -f 跟随最新的日志打印 --tail 数字 显示最后多少条

[root@eclipse ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cb5814efd6da nginx "/docker-entrypoint.…"   6 weeks ago Up 2 minutes 80/tcp frosty_keller
[root@eclipse ~]# docker logs cb5 -t -f --tail 5
2020-12-10T14:21:32.392176888Z /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
2020-12-10T14:21:32.399762487Z /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
2020-12-10T14:21:32.402023731Z 10-listen-on-ipv6-by-default.sh: error: IPv6 listen already enabled
2020-12-10T14:21:32.404200667Z /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
2020-12-10T14:21:32.413931054Z /docker-entrypoint.sh: Configuration complete; ready for start up

3 进入容器内部执行命令

3.1进入容器内 docker exec 容器id

-i 以交互模式运行容器

-t 分配终端窗口 /bin/bash

传统模式下我们安装完软件之后可以直接进入到它的安装目录下,然后执行这个软件的相关命令。

使用Docker之后,运行的Docker容器里面包含了一个软件环境,所以我们需要先进入到容器里面的软件环境内部,然后才能执行这个软件的相关命令。

[root@eclipse ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cb5814efd6da nginx "/docker-entrypoint.…"   6 weeks ago Up 16 minutes 80/tcp frosty_keller
[root@eclipse ~]# docker exec -it cb5 /bin/bash
root@cb5814efd6da:/# ls
bin boot dev docker-entrypoint.d docker-entrypoint.sh etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@cb5814efd6da:/#

3.2退出容器 exit

[root@eclipse ~]# docker exec -it cb5 /bin/bash
root@cb5814efd6da:/# exit
exit
[root@eclipse ~]#

3.3我们可以将镜像打成压缩包

docker save 镜像名 -o 名称.tar

3.4我们还可以载入镜像

docker load -i 名称.tar

04

Docker安装常用软件

1安装mysql

1.1拉取mysql镜像

docker pull mysql

1.2运行mysql服务

这里设置账户和密码都是root

docker run --name mysql -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 -d mysql

1.3进入mysql容器

docker exec -it 容器id /bin/bash

[root@eclipse ~]# docker run --name mysql -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 -d mysql
977b216cf344257d268ee0cf4e5f20d892bb6619787f64c5791bc5d4a4309af4
[root@eclipse ~]# docker exec -it 977 /bin/bash
root@977b216cf344:/# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.22 MySQL Community Server - GPL

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

1.4将容器数据位置与宿主机位置挂载保证数据安全

docker run --name mysql -v /root/mysql/data:/var/lib/mysql -v /root/mysql/conf.d:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 -d mysql

2 安装MongoDB数据库

2.1拉取Mongo镜像

docker pull mongo

2.2运行MongoDB镜像

其实就是安装Mongo。-v后面的参数表示把数据文件挂载到宿主机的路径,-p把mongo端口映射到宿主机的指定端口,--auth表示连接mongodb需要授权。

$ docker run -d --name mongo -p 27017:27017 mongo --auth

2.3以admin身份进入到mongo内部

$ docker exec -it mongo mongo admin
# 创建admin管理员账户
>  db.createUser({ user:'admin',pwd:'123456',roles:[ { role:'userAdminAnyDatabase', db: 'admin'},"readWriteAnyDatabase"]});
# 对admin进行身份认证
> db.auth('admin', '123456')

2.4将mongoDB中数据目录映射到宿主机中

docker run -d -p 27017:27017 -v /root/mongo/data:/data/db --name mymongo mongo

2.5 连接Mongo

其他的软件安装可以参考下面网址

https://www.runoob.com/docker/docker-tutorial.html

-END-

本文分享自微信公众号 - eclipse编程(eclipsecamp),作者:一颗雷布斯

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-12-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 平均年薪30万!人才缺口500万!人工智能工程师为什么这么火?

    在一线城市,年薪10万仅能饱腹,就算熬夜加班苦干10年达到100万,相信也所剩无几。

    Leetcode名企之路
  • 只有2~3年左右的开发经验, 为什么年薪就可以达到50万+?

    年薪达到50万+,也不一定得码代码,当个苦逼的程序员。我有一个哥们,离职随后半年时间不到,直接上升到年薪50万的水准,原因很简单,我的朋友在街边摆起了茶叶蛋。—...

    美的让人心动
  • Java架构技术怎么学,做到年薪50W会这几点就够了

    他们的共同特点是:10 年以上的工作经验,在大公司当过螺丝钉,也在创业公司做过技术 leader,有过一两段不算成功的创业经历。

    Java架构
  • 刚,薪酬榜来了!这9类程序员上榜:AI第1 全栈第3,你排第几?

    作为全球知名招聘求职网站Indeed,最近发布了2019年度最佳工作榜单,公布了2019年的最佳行业领域及工作岗位薪酬,在全行业的榜单中,跟程序员相关的岗位有9...

    AI科技大本营
  • AI人才缺口上百万:应届生年薪50万!计算机相关专业就业情况大盘点!

    AI,也就是人工智能,最近几年一直都比较火,在就业市场也比较吃香。但令人惊讶的是,这个专业的应届生年薪竟能高达30~50万,且依然存在人才缺口的状态…

    前朝楚水
  • Stack Overflow 2019 开发者年度调查报告都说了什么?

    几天前,Stack Overflow 发布了 2019 年的开发者年度调查报告,本次约有 90000 名开发者接受调查。

    GitHubDaily
  • 又被平均了!互联网人平均年薪19万;程序员四成单身!

    挖财和饿了么今日联合发布《互联网从业者生活品质报告》。据报告统计,互联网从业者平均年薪 19 万元,其中 10% 程序员的年收入高于 50 万,有 29% 的互...

    小莹莹
  • 一周播报|这世界还有没有月薪3W以下的程序员?谎言背后才是真正的生活

    目前已有一张上亿级别的数据表,要实行表分区,并准备按照日期分区。然后需要定时扩充分区,最好对三个月以上的数据进行自动迁移历史表。

    养码场
  • 干货 | Fintech人才缺口破百万:应届起薪60W, 没出校门就被抢光

    Fintech=Fin(金融)+Tech(技术性),Fintech的定义有很多,华尔街俱乐部对Fintech的定义是运用新技术给金融领域带来创新的技术和公司,大...

    量化投资与机器学习微信公众号
  • 学Python做人工智能的前景怎么样?如何入行?

    已经没有什么能够阻挡Python了。根据最近火爆朋友圈的一则消息,Python已经进入山东省小学教材。Python这几年的火热,离不开人工智能和机器学习。

    python学习教程
  • Quant在纽约:如何赚大钱?

    如果你是一名量化分析师,在2020年想在纽约有一份薪酬较高的工作,看看下面的内容:

    量化投资与机器学习微信公众号
  • PHP 是最好的语言吗?

    最近被朋友们拉入了几个技术社群,有微信群,也有QQ群,尤其对一些年轻的朋友,大家乐此不疲的问题居然是 PHP 是最好的语言么?

    半吊子全栈工匠
  • AI应届博士年薪80万起步,BAT校招数据大披露:缺人!

    据第一财经报道,今年,AI领域应届毕业生薪水行情仍在噌噌上涨。去年,应届博士生能拿到高达50万元的年薪,今年薪水则涨到80万元。

    新智元
  • 人工智能 | AI 不断入侵,程序员还能不能好好敲代码了

    近日,微信翻译团队又将其围棋 AI 程序 PhoenixGo 开源。这是一个基于 AlphaGo Zero 论文实现,具有超越人类棋手的围棋功力,在 2018 ...

    灯塔大数据
  • 决胜未来,2019年前端开发十大战略性技术布局

    2010年的你,如果能学会Android开发,现在的你,薪资不会低于年薪50万……

    前端大彬哥
  • 程序员‘故事会’,详解负载均衡技术的实现:从tomcat到Nginx

    负载均衡是任何一个有一定规模的互联网企业都会考虑的问题,负载方式很多,有依靠硬件实现的,也有依靠软件实现负载的。

    Java知音
  • 互联网大厂薪资Top10:阿里登顶,华为垫底,腾讯被逆袭

    现在是春招旺季,许多应届毕业生也是纷纷投入找工作的大军中。在国内的众多行业中,互联网公司是最吸引年轻人的一个行业,因为它新潮,而且给的工资待遇比较高,尤其是那些...

    钱塘数据
  • 华为垫底,腾讯被逆袭,百度不如搜狗,2018互联网大厂薪资Top10

    导读: 现在是春招旺季,许多应届毕业生也是纷纷投入找工作的大军中。在国内的众多行业中,互联网公司是最吸引年轻人的一个行业,因为它新潮,而且给的工资待遇比较高,尤...

    华章科技
  • AI人才抢夺“生猛”: 应届博士年薪涨到80万元

    一年前,针对AI领域的应届毕业生,硕士生约莫能拿到30万元的年薪,博士生则高达50万元。今年,薪水行情仍在噌噌上涨。

    AI科技大本营

扫码关注云+社区

领取腾讯云代金券