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

全部评论

相关推荐

挣K存W养DOG:入职送金条全球游,路过缅甸停一下🐔
点赞 评论 收藏
分享
微风不断:兄弟,你把四旋翼都做出来了那个挺难的吧
点赞 评论 收藏
分享
点赞 4 评论
分享
牛客网
牛客企业服务