Docker

初识Docker

Docker:是一个开源的应用容器引擎。Go语言实现,诞生于2013年。

容器是完全使用沙箱机制,相互隔离。

Docker是一种容器技术,解决软件环境迁移问题。

安装Docker

yum包更新到最新

sudo yum update

安装需要的软件包

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

设置yum源

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

安装docker

yum install -y docker-ce

查看docker版本

docker -v

Docker架构

alt

  • 镜像(Image):Docker镜像(Image),相当于是一个root文件系统。比如官方镜像ubuntu:16.04就包含了一套ubuntu16.04最小系统的root文件系统。
  • 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中类和对象的关系,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
  • 仓库(Repository):仓库可看成是一个代码控制中心,用来保存镜像。

配置镜像加速器

默认docker镜像比较慢需要更换成国内的。 阿里云自带 alt

Docker命令

后台守护进程命令

  • 启动docker:systemctl start docker
  • 查看状态:systemctl status docker
  • 停止docker:systemctl stop docker
  • 重启docker:systemctl restart docker
  • 开机启动docker:systemctl enable docker

Docker镜像相关命令

ducker hub网站查看docker镜像版本

  • 查看镜像:docker images
  • 查看镜像id:docker images -q REPOSITORY TAG(版本) IMAGE ID(镜像ID) CREATED(创建时间) SIZE(镜像大小)
  • 搜索镜像:docker search redis official【ok】表示官方维护的镜像
  • 拉取镜像:docker pull redis 默认下载latest版本,否则可以docker pull redis:5.0
  • 删除镜像:docker rmi redis:TAG
  • 删除所有镜像:docker rmi docker images -q``

容器相关命令

  • 查看容器:
  • 创建容器:docker run -it --name=c1 centos:7 /bin/bash alt

-i一直运行t马上给个终端

--name=c1起个名字叫c1

centos:7根据哪个镜像

/bin/bash初始化指令

  • 退出容器:exit
  • 查看正在运行的容器:docker ps
  • 查看历史容器:docker ps -a
root@iZ2ze5kq3112w20bes3g08Z:~# docker ps -a
CONTAINER ID   IMAGE      COMMAND       CREATED         STATUS                          PORTS     NAMES
1218db9cba86   centos:7   "/bin/bash"   3 minutes ago   Exited (0) About a minute ago             c1
  • 后台运行:docker run -id --name=c2 centos:7;docker exec -it c2 /bin/bash
root@iZ2ze5kq3112w20bes3g08Z:~# docker run -id --name=c2 centos:7
4b7be99c2f12c9a966a43d0b2fd9b19d6acb881c1f299db3408d75ae40dc6cd3
root@iZ2ze5kq3112w20bes3g08Z:~# docker ps -a
CONTAINER ID   IMAGE      COMMAND       CREATED         STATUS                     PORTS     NAMES
4b7be99c2f12   centos:7   "/bin/bash"   7 seconds ago   Up 6 seconds                         c2
1218db9cba86   centos:7   "/bin/bash"   6 minutes ago   Exited (0) 5 minutes ago             c1
root@iZ2ze5kq3112w20bes3g08Z:~# docker exec -it c2 /bin/bash
  • 停止容器:docker stop c2
  • 开启容器:docker start c2;docker exec -it c2 /bin/bash
  • 删除容器:docker rm c2 不能删掉正在运行的容器
  • 查看容器信息:docker inspect c2 alt

docker的数据卷

数据卷概念

  • Docker容器删除后,在容器中产生的数据还在么?不 alt

  • Docker容器和外部机器可以直接交换文件么?不 alt

  • 容器之间想要进行数据交互?数据卷 alt

  • 数据卷 数据卷是宿主机中的一个目录或文件

当容器目录和数据卷目录绑定之后,对方的修改会立即同步。

一个数据卷可以被多个容器同时挂载

一个容器也可以被挂载多个数据卷

数据卷就是为了解决:

  1. 容器数据持久化
  2. 外部机器和容器间接通信
  3. 容器间数据交换

配置数据卷

  • 创建启动容器的时候,使用-v参数设置数据卷
docker run ... -v 宿主机目录(文件):容器内目录(文件) ...
docker run -it --name=centos1 -v /root/data:/root/data_container centos:7 /bin/bash

这两个目录就会同步

  1. 目录必须是绝对路径
  2. 如果幕布不存在就会自动创建
  3. 可以挂载多个数据卷 alt
docker run -it --name=centos2 -v ~/data:/root/data centos:7

Ⅰ宿主机/root/dataⅡ容器centos1/root/data_containerⅢ容器centos2/root/data三者同步

数据卷容器

多容器进行数据交换 alt

配置数据卷容器

  • 创建 alt
docker run -it --name=c3 -v /volume centos:7

alt 创建并挂载到c3上

docker run -it --name=c2 --volumes-from c3 centos:7

alt

docker run -it --name=c1 --volumes-from c3 centos:7

alt 此时c1、c2、c3的/root/volume相通,c3是数据卷 alt alt

Docker应用部署

MySQL部署

在Docker中部署MySQL

  1. 搜索mysql镜像
  2. 拉取mysql镜像
  3. 创建容器
  4. 操作容器中的mysql alt
  5. 搜索并拉取容器
docker search mysql
docker pull mysql:5.6
  1. 创建容器,设置端口映射、目录映射
mkdir ~/mysql
cd ~/mysql
docker run -id \
-p 3306:3306 \
--name=c_mysql \
-v $PWD/conf:/etc/mysql/conf.d \
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=532101 \
mysql:5.6
  1. 进入镜像
docker exec -it c_mysql /bin/bash
  1. 进入mysql
mysql -uroot -p

Tomcat部署

dcoker search tomcat
docker pull tomcat
mkdir ~/tomcat
cd ~/tomcat
docker run -id --name=c_tomcat \
-p 8080:8080 \
-v $PWD:/usr/local/tomcat/webapps \
tomcat

Nginx部署

docker pull nginx

mkdir ~/nginx
cd ~/nginx
mkdir conf
cd conf

vim nginx.conf

alt

docker run -id --name=c_nginx \
-p 80:80 \
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \
-v $PWD/logs:/var/log/nginx \
-v $PWD/html:/usr/share/nginx/html \
nginx

redis部署

docker

docker search redis

docker pull redis:5.0

docker run -id --name=c_redis -p 6379:6379 redis:5.0

修改redis配置文件

redis.conf下载连接:http://download.redis.io/redis-stable/redis.conf?spm=a2c6h.12873639.article-detail.6.643e3c09qsXuxB&file=redis.conf

宿主机存放目录:/etc/redis.conf

修改:bind 127.0.0.1注释掉或者是将后面的ip改成0.0.0.0。这样表示所有的ip都能访问该redis服务,否则只有本机可以访问。第二处,将protected-mode的值改成no,默认为yes.

检查防火墙是否开放端口

firewall-cmd --query-port=6379/tcp
firewall-cmd --zone=public --add-port=6379/tcp --permanent
firewall-cmd --reload

检查阿里云安全组是否开启了6339端口

外部机连接

D:\redis>redis-cli.exe -h 60.205.149.67 -p 6379

Dockerfile

Docker镜像原理

  • Docker镜像本质是什么 分层的文件系统 alt
  • 为什么centos镜像比ios文件小这么多 centos的ios镜像文件包含bootfs和rootfs,而docker的centos镜像服用操作系统的bootfs,只有rootfs和其他镜像层
  • 为什么tomcat镜像很大,安装包却很小 docker中一个tomcat alt

alt

镜像制作

该镜像能够在docker ps中找到

docker commit 17746 redis_l:1.0

该镜像就会存在于images

打包成.tar
docker save -o redis_l.tar redis_l:1.0

还原镜像
docker load -i redis_l.tar
//运行
docker run -it --name=new_redis redis_l:1.0 bash

dockerfile

alt

可以查找dockerhub

  • form指定父镜像
  • run执行命令
  • cmd容器启动命令 自定义一个centos的镜像

要求:1.默认登陆路径/usr2.可以用vim

定义父镜像
FROM centos:7
定义作者信息:
MAINTAINER itheima<itheima@itcast.cn>
执行安装vim的命令
run yum install -y vim
设置工作路径
WORKDIR /usr
定义容器启动执行命令
CMD /bin/bash
FROM centos:7
MAINTAINER zhouda<zhouda1998@qq.com>
RUN yum install -y vim
WORKDIR /usr

cmd /bin/bash

执行

docker build -f ./centos_dockerfile -t docker_centos:1 .

docker run -it --name=c_centos docker_centos:1

alt

springboot项目

服务编排

docker compose alt

docker私有仓库

搭建私有仓库

alt alt alt alt alt

docker容器虚拟化

alt

alt

全部评论

相关推荐

不愿透露姓名的神秘牛友
06-30 18:19
点赞 评论 收藏
分享
06-18 13:28
已编辑
门头沟学院 Web前端
爱睡觉的冰箱哥:《给予你300的工资》,阴的没边了
点赞 评论 收藏
分享
避坑恶心到我了大家好,今天我想跟大家聊聊我在成都千子成智能科技有限公司(以下简称千子成)的求职经历,希望能给大家一些参考。千子成的母公司是“同创主悦”,主要经营各种产品,比如菜刀、POS机、电话卡等等。听起来是不是有点像地推销售公司?没错,就是那种类型的公司。我当时刚毕业,急需一份临时工作,所以在BOSS上看到了千子成的招聘信息。他们承诺无责底薪5000元,还包住宿,这吸引了我。面试的时候,HR也说了同样的话,感觉挺靠谱的。于是,我满怀期待地等待结果。结果出来后,我通过了面试,第二天就收到了试岗通知。试岗的内容就是地推销售,公司划定一个区域,然后你就得见人就问,问店铺、问路人,一直问到他们有意向为止。如果他们有兴趣,你就得摇同事帮忙推动,促进成交。说说一天的工作安排吧。工作时间是从早上8:30到晚上18:30。早上7点有人叫你起床,收拾后去公司,然后唱歌跳舞(销售公司都这样),7:55早课(类似宣誓),8:05同事间联系销售话术,8:15分享销售技巧,8:30经理训话。9:20左右从公司下市场,公交、地铁、自行车自费。到了市场大概10点左右,开始地推工作。中午吃饭时间大约是12:00,公司附近的路边盖饭面馆店自费AA,吃饭时间大约40分钟左右。吃完饭后继续地推工作,没有所谓的固定中午午休时间。下午6点下班后返回公司,不能直接下班,需要与同事交流话术,经理讲话洗脑。正常情况下9点下班。整个上班的一天中,早上到公司就是站着的,到晚上下班前都是站着。每天步数2万步以上。公司员工没有自己的工位,百来号人挤在一个20平方米的空间里听经理洗脑。白天就在市场上奔波,公司的投入成本几乎只有租金和工资,没有中央空调。早上2小时,晚上加班2小时,纯蒸桑拿。没有任何福利,节假日也没有3倍工资之类的。偶尔会有冲的酸梅汤和西瓜什么的。公司的晋升路径也很有意思:新人—组长—领队—主管—副经理—经理。要求是业绩和团队人数,类似传销模式,把人留下来。新人不能加微信、不能吐槽公司、不能有负面情绪、不能谈恋爱、不能说累。在公司没有任何坐的地方,不能依墙而坐。早上吃早饭在公司外面的安全通道,未到上班时间还会让你吃快些不能磨蹭。总之就是想榨干你。复试的时候,带你的师傅会给你营造一个钱多事少离家近的工作氛围,吹嘘工资有多高、还能吹自己毕业于好大学。然后让你早点来公司、无偿加班、抓住你可能不会走的心思进一步压榨你。总之,大家在找工作的时候一定要擦亮眼睛,避免踩坑!———来自网友
qq乃乃好喝到咩噗茶:不要做没有专业门槛的工作
点赞 评论 收藏
分享
评论
点赞
4
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务