docker:从0到1

一.docker概述

docker为什么出现

本机和上线环境会完全一模一样的一致吗?

很难,且如果项目版本更新,我本机上的和上线的又能保持完全一模一样的一致吗?

比如我在windows上开发了一个jar+redis+es等等一系列,准备部署上线,我还需要在上线环境上部署吗?

docker为我们提供了一个解决这些所有问题的答案,即docker运用虚拟化技术通过模拟运行在一个完全隔离环境中的完整计算机系统

二.docker安装

1.基本组成

1.image镜像

是一个模板,我们可以通过模板构造出任意我们想要的容器环境

2.container容器

装镜像的壳子,相当于一个运行的系统

3.repository仓库

存放镜像的地方

2.docker安装

1.教程

https://cloud.tencent.com/document/product/213/46000

2.加速

vi /etc/docker/daemon.json
{ "registry-mirrors": ["https://registry.docker-cn.com"]
}

3.搭建

docker run -d -p 90:80 nginx

-d放入后台,-p端口映射,nginx镜像名称

image-20240226184550112

访问本机90端口即可看见环境搭建完成

三.docker相关命令

1.常用命令

docker image 查看镜像
docker pull 下载镜像
docker rmi 删除镜像
docker ps 列出运行容器
docker rm 删除容器
docker stop 暂停容器
docker start 启动容器

导出镜像

[root@docker01 ~]# docker image list 
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              latest              ff426288ea90        3 weeks ago         207MB
nginx               latest              3f8a4339aadd        5 weeks ago         108MB
# 导出
[root@docker01 ~]# docker image save centos > docker-centos.tar.gz

导入则用load命令

docker image load -i docker-centos.tar.gz 

如何使export就对应用import,只是对应不是容器罢了,而是镜像

进入容器

docker run -it #参数:-it 可交互终端

2.挂载卷

挂载时可以使用同一个卷

docker run -d -p 90:80 -v /data:/usr/share/nginx/html nginx:latest
echo "hacked by guyue" >/data/index.html

image-20240226185611234

3.创建镜像

启动一个镜像

比如debian10.5

[root@docker01 ~]# docker pull debian:19.5
[root@docker01 ~]# docker run -it -p 99:22 debian:19.5 /bin/bah

在容器内修改账号密码,并且自动启动ssh服务

yum install  openssh-server -y 
echo "root:xxx" |chpasswd
/etc/init.d/sshd start

并且安装httpd服务

yum install httpd -y

编写启动脚本

#!/bin/bash 
/etc/init.d/httpd start 
/usr/sbin/sshd -D
比如,init.sh

提交其为新的镜像

 docker commit  5b8161fda2a9 centos6-httpd 
docker run -d -p 99:22 -p 80:80  centos6-httpd /init.sh 
46fa6a06644e31701dc019fb3a8c3b6ef008d4c2c10d46662a97664f838d8c2c

自启动

当然这里推荐最好分层

4.dockerfile自动构建docker镜像

我们在docker pull的时候会看到不同的一层层的镜像正在拉取

比如如果加载的是linux环境,加载的第一层会是bootfs文件系统,包含内核和boot,然后一层层添加,比如第二层就是加rootfs,包含的各种命令

像是这样

image-20240226205440675

除此之外,已拉取的镜像是不可写的,而容器是可写的,因为不同的容器可能会用的相同的镜像

FROM        # 基础镜像,一切从这里开始构建
MAINTAINER    # 镜像是谁写的:姓名+邮箱
RUN            # 镜像构建的时候需要运行的命令
ADD            # 步骤:tomcat镜像,这个tomcat压缩包!添加内容
WORKDIR        # 镜像的工作目录
VOLUME        # 挂载的目录
EXPOSE        # 暴露端口配置
CMD            # 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT    # 指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD        # 当构建一个被继承DockerFile这个时候就会运行ONBUILD的指令。触发指令。
COPY        # 类似ADD,将我们文件拷贝到镜像中
ENV            # 构建的时候设置环境变量!

比如我们这样写一个

# 创建一个dockerfile文件,名字可以随机,建议dockerfile
# 文件中的内容:指令都是大写
FROM centos
VOLUME ["volume01","volume02"]
CMD echo "-----end-----"
CMD /bin/bash
MAINTAINER yueji0j1anke
# 这里的每个命令,就是镜像的一层。

然后

docker build -f ./dockerfile01 -t guyue.centos .

image-20240226210438683

image-20240226210729472

可以看到我们挂载的两个目录

查看一下路径即可

docker inspect id

image-20240226210909700

image-20240226211104016

同步成功

除此之外,多个mysql可以实现数据共享

docker run -d -p 7777:3306 -v 
/home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e 
MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
​
docker run -d -p 7777:3306 -e
 MYSQL_ROOT_PASSWORD=123456 --name mysql02 --volumes-from mysql01 mysql:5.7

两个容器中的数据实现同步

这里需要讲一讲cmd和entrypoint的区别

cmd是容器启动要执行的命令

entrypoint可以累加

四.docker网络

1.自创网卡

image-20240226213257412

docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet

image-20240226213325676

启动时使用该网卡

docker run -d -P --name tomcat-net-02 --net mynet tomcat:7.0

2.网络联通

跨网卡操作

docker network connect name name

五.创建一个docker仓库

docker run -d -p 5000:5000 --restart=always --name yuejinjianke -v /opt/myregistry:/var/lib/registry  registry

修改配置文件,使其支持http

[root@docker01 ~]# cat  /etc/docker/daemon.json  {  "registry-mirrors": ["https://registry.docker-cn.com"],  "insecure-registries": ["10.0.0.100:5000"] }

restart docker

上传即可

[root@docker01 ~]# docker push   10.0.0.100:5000/clsn/busybox

更多详情

https://cloud.tencent.com/developer/article/1885678
  • 19
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值