docker学习

docker

安装(centos)

文档地址:https://docs.docker.com/engine/install/centos/

1、卸载旧的版本

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

2、安装需要的包

yum install -y yum-utils

#设置docker仓库
yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo #默认地址,国外的,网速较慢
    
yum-config-manager \
	--add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #阿里云地址

3、安装最新版docker引擎

#docker-ce社区版,docker-ee企业版
yum install docker-ce docker-ce-cli containerd.io

#安装指定版本的docker
yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io

4、启动docker

systemctl start docker

#版本信息
docker version

5、helloworld

docker run hello-world
docker images #查看镜像信息

卸载

1、卸载依赖

yum remove docker-ce docker-ce-cli containerd.io

2、删除相关文件

rm -rf /var/lib/docker  #/var/lib/docker是docker的默认工作路径

阿里云镜像加速

在这里插入图片描述

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

常用命令

docker version		#版本信息
docker info			#详细信息
docker 命令 --help	#帮助命令

docker images --help
Options:
  -a, --all             Show all images #展示所有的镜像
  -f, --filter filter   Filter output based on conditions provided
      --format string   Pretty-print images using a Go template
      --no-trunc        Don't truncate output
  -q, --quiet           Only show image IDs #只展
  示id 

docker search mysql #搜索,对应docker hub,地址:https://registry.hub.docker.com/
NAME                              DESCRIPTION                                     STARS     
mysql                             MySQL is a widely used, open-source relation…   10466     
mariadb                           MariaDB is a community-developed fork of MyS…   3891     
mysql/mysql-server                Optimized MySQL Server Docker images. Create…   768       
percona                           Percona Server is a fork of the MySQL relati…   526       

docker pull mysql #从仓库下载mysql镜像,默认是最新版本,docker pull mysql:5.7(5.7版本)
Using default tag: latest
latest: Pulling from library/mysql
*
*
*
Digest: sha256:feada149cb8ff54eade1336da7c1d080c4a1c7ed82b5e320efb5beebed85ae8c
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest#docker pull mysql=docker pull docker.io/library/mysql:latest

docker rmi -f a70d36bc331a #删除指定id的镜像,docker rmi -f id id >>删除多个id
docker rmi -f $(docker images -aq) #删除所有的镜像

docker run 参数 镜像
--name="mysql01" #容器名称
-d 				 #后台运行,如果直接后台运行但是后面又没有任务的话,这个启动了就直接停止了
-it				 #使用交互方式运行,进入容器查看内容,docker run -it mysql /bin/bash(使用exit停止退出或者ctrl+p+q不停止退出)
-P				 #指定容器端口 -P 8080:8080 主机端口:容器端口
-p				 #随机指定端口

docker ps #列出在运行的容器
-a				 #曾经运行的全部容器
-q				 #显示id

docker rm id  #删除指定的容器,只能删除没有运行的容器
docker rm -f id #删除指定的容器,直接强制删除

docker start id   #启动docker run启动时其实有两步操作,先是创建,然后再是启动
docker restart id   #重启
docker stop id   #通知
docker kill id   #杀掉

docker logs -tf --tail 10 1485b8fbc3a8 #日志输出

docker top id #进程信息

docker inspect id #所有信息

docker exec -it id  /bin/bash #进入容器
docker attach id  #进入的是正在运行的控制台、

docker cp id:路径(容器) 路径(本地) #从容器里面拷贝出来

安装nginx

#1、拉取镜像
docker pull nginx

#2、启动
docker run -d --name nginx1 -p 6379:80 nginx

#3、访问测试
http://8.131.95.101:6379/
Welcome to nginx!#成功
#--rm就是用完即停,可以做测试用
docker run -it --rm -p 6379:8080 tomcat:9.0#启动tomcat

docker run -d -p 6379:8080 tomcat:9.0#启动tomcat
docker exec -it  e693f3be00ec /bin/bash#进入容器
cp -r webapps.dist/* webapps#注意,tomcat的包默认是最小的,里面是没有的默认的东西了,在webapps.dist有
http://8.131.95.101:6379/#测试成功

commit

docker  run  -it -p 6379:8080 tomcat:9.0 #启动tomcat
docker exec -it 75d6caf4c325 /bin/bash #进入容器
cp -r webapps.dist/* webapps #拷贝webapps的东西
#提交镜像 -a作者 -m信息
docker commit -a="xiaozhu" -m="add web app" 75d6caf4c325 tomcat02:1.0 
docker run -d -p 6379:8080 tomcat02:1.0 #启动成功。默认就有tomcat的欢迎页面

在这里插入图片描述

数据卷

#启动tomcat -v挂载,本机/docker/tomcat02目录映射到容器的/home目录,完成文件同步,修改本地数据容器里面的数据也会改变
docker run -it -v /docker/tomcat02:/home -p 6379:8080 tomcat02:1.0 /bin/bash

在这里插入图片描述

#启动mysql -e 环境配置 --name 容器名字 
docker run -d -p 3306:3306 -v /docker/mysql/conf:/etc/mysql/conf.d -v 
/docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql
#本地使用数据库工具连接测试成功
#使用工具新建一个数据库docker
#然后在服务器本地的data里面新加了一个docker文件夹,说明映射成功

在这里插入图片描述

如果将容器删除,挂载到本地的数据也不会丢失

-v 容器内路径 匿名挂载

-v 卷名:容器内路径 具名挂载

-v /宿主机路径:容器内路径 指定路径挂载

-v 卷名:容器内路径 :ro 只读readonly 只能通过宿主机改变,不能在容器内部改变

-v 卷名:容器内路径 :rw 读写readwrite

dockerfile

#dockerfile文件
FROM nginx

VOLUME ["volume01","volume02"]

CMD echo "----end----"
CMD /bin/bash
#构建镜像,最后面的一个点一定要加上
docker build -f dockerfile1  -t nginx:1.0 .
#启动自己构建的nginx镜像
docker run -it nginx:1.0 /bin/bash

在这里插入图片描述
发现在构建镜像的时候把挂载的两个目录也构建进来了,在volume01里面新建一个test.txt文件,另外打开一个连接查看详细信息docker inspect e131d7e06493
在这里插入图片描述

所有的挂载默认在var/lib/docker/volumes下面,因为是匿名挂载,所以生成了随机码

进入上面挂载的目录cd /var/lib/docker/volumes/77cb9e0d03371584aa4cc6c8c88addcfca9a31eecad1bae262de099228014b96/_data

发现也有一个test.txt,挂载成功

容器数据挂载

#--volumes-from 可以继承其他容器的挂载
docker run -it --name docker01 nginx:1.0
docker run -it --name docker02 --volumes-from docker01  nginx:1.0
docker ps #发现启动了两个容器
docker attach dcfd4190c983 #进入docker01里面呢, 在volume01目录下touch docker01
docker attach 1220705d4d07 #进入docker02里面呢, 在volume01目录下发现自动同步了docker01

docker run -it --name docker03 --volumes-from docker01  nginx:1.0 #在新建一个容器docker03,发现启动时在volume01目录下就已经有docker01了

现在有三个容器在启动,其中docker02和docker03继承与docker01,这时我们听到docker01,发现docker02和docker03的数据还在,

dockerfile详解

dockerfile就是构建镜像的文件

命令:

  1. 每一个关键字都是大写的
  2. #表示注释
  3. 每一个指令都会创建提交一个新的镜像层,并提交
FROM  		#基础镜像
MAINTAINER  #镜像是谁写的,姓名+邮箱
RUN			#镜像构建的时候需要运行的命令
ADD			#添加内容
WORKDIR		#镜像的工作目录
VOLUME		#挂载的目录
EXPOST		#暴露端口
CMD			#指定这个容器启动的时候运行的命令,只有最后一个生效,可被替代
ENTRYPOINT	#指定这个容器启动的时候运行的命令,可以追加命令
ONBUILD		#当构建一个被继承 dockerfile 这个时候就会运行ONBUILD 的指令,触发指令
COPY		#类似ADD,将我们文件拷贝到镜像中
ENV			#构建的时候设置环境变量

构建centos镜像

1、编写自己的dockerfile
FROM centos
MIANTAINER xiaozhu<1778815369@qq.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD echo "----end----"
CMD /bin/bash

2、构建镜像
#-f fockerfile文件  -t 镜像名:[tag]
docker build -f mydockerfile -t centos:0.1 .

Successfully built 46e4cf26012a
Successfully tagged centos:0.1

3、运行自己构建的镜像
docker run -it centos:0.1
#测试,直接进入工作目录,ifconfig和vim命令都有了
[root@9f069968bd9d local]# pwd
/usr/local
[root@9f069968bd9d local]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)
        RX packets 12  bytes 976 (976.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
#可以通过 docker history 命令查看镜像构建过程
[root@xiaozhu dockerfile]# docker history centos:0.1
IMAGE          CREATED          CREATED BY                                      SIZE      COMMENT
46e4cf26012a   7 minutes ago    /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "/bin…   0B        
874ce59309b3   7 minutes ago    /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "echo…   0B        
1b6e70deac61   7 minutes ago    /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "echo…   0B        
5013faac6995   7 minutes ago    /bin/sh -c #(nop)  EXPOSE 80                    0B        
fa43c1a6ec76   7 minutes ago    /bin/sh -c yum -y install net-tools             23.3MB    
ebf471faf3a5   7 minutes ago    /bin/sh -c yum -y install vim                   58.1MB    
b46655dcf92a   21 minutes ago   /bin/sh -c #(nop) WORKDIR /usr/local            0B        
aad91ac95274   21 minutes ago   /bin/sh -c #(nop)  ENV MYPATH=/usr/local        0B        
ceddd61c605a   21 minutes ago   /bin/sh -c #(nop)  MAINTAINER xiaozhu<177881…   0B        
300e315adb2f   2 months ago     /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B        
<missing>      2 months ago     /bin/sh -c #(nop)  LABEL org.label-schema.sc…   0B        
<missing>      2 months ago     /bin/sh -c #(nop) ADD file:bd7a2aed6ede423b7…   209MB 

CMD 构建时使用CMD命令,在启动容器时如果在后面添加了命令会把CMD命令覆盖掉

ENTRYPOINT 构建时使用ENTRYPOINT命令,在启动容器时如果在后面添加了命令会直接ENTRYPOINT命令后面添加命令

构建tomcat镜像

1、准备tomcat压缩包,jdk压缩包

[root@xiaozhu tomcat]# ll
total 151004
-rw-r--r-- 1 root root  11483588 Feb  9 10:17 apache-tomcat-9.0.43.tar.gz
-rw-r--r-- 1 root root 143142634 Feb  9 10:17 jdk-8u271-linux-x64.tar.gz

2、编写Dockerfile

FROM centos
MAINTAINER xiaozhu<1778815369@qq.com>

COPY readme.txt /usr/local/readme.txt

ADD jdk-8u271-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.43.tar.gz /usr/local/

ENV MYPATH /usr/local
WORKDIR $MYPATH

ENV JAVA_HOME /usr/local/jdk1.8.0_271
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.43
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.43
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

EXPOSE 8080

CMD /usr/local/apache-tomcat-9.0.43/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.43/logs/catalina.out

3、构建镜像

docker build -t mytomcat:1.0 .

Successfully built a39820ee90a0
Successfully tagged mytomcat:1.0

4、启动镜像

docker run -d -p6379:8080 --name mytomcat01 mytomcat:1.0

在外面访问没问题,查看日志也没问题

发布镜像

1、注册账号

2、服务器上面登录我们的账号

[root@xiaozhu tomcat]# docker login --help

Usage:  docker login [OPTIONS] [SERVER]

Log in to a Docker registry.
If no server is specified, the default is defined by the daemon.

Options:
  -p, --password string   Password
      --password-stdin    Take the password from stdin
  -u, --username string   Username
  
[root@xiaozhu tomcat]# docker login -u zhugl
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

3、发布

docker push zhugl:mytomcat:1.0

发布到阿里云

1、到阿里云镜像服务里面创建命名空间
在这里插入图片描述

2、创建镜像仓库
在这里插入图片描述

创建时选择本地仓库

3、点击创建的镜像仓库,跟着操作步骤一步一步的完成
在这里插入图片描述

在使用"docker tag"命令重命名镜像,一定要注意是docker账号开头

比如说我的docker账号是zhugl、

docker tag fa63a27ef15c zhugl/nginx:1.0

<think>嗯,用户想了解Docker学习路径。首先我得理清楚Docker的基础知识,然后分步骤来规划。可能用户是刚开始接触容器技术,需要从最基础的概念讲起。 首先应该介绍Docker是什么,为什么需要它。然后安装和环境配置,这部分可能需要涵盖不同操作系统的安装步骤,比如Windows、macOS和Linux。接着是基本命令,像镜像和容器的管理,这部分比较实用,用户可能需要实际操作例子。 接下来是Dockerfile和镜像构建,这是关键部分,用户需要学会如何自定义镜像。之后是数据管理和网络配置,这些在实际项目中很重要,比如卷的使用和容器间通信。然后是Docker Compose,处理多容器应用,用户可能会用到这个来部署复杂应用。 高级部分可能需要包括Docker Swarm和Kubernetes的基础,但用户可能暂时不需要太深入,可以简要提一下。最后是安全性和最佳实践,确保用户了解如何安全地使用Docker。 还要考虑用户可能的应用场景,比如开发、测试或者生产环境部署。可能需要推荐一些实践项目,比如搭建Web应用,帮助用户巩固知识。另外,学习资源方面,官方文档和社区资源很重要,可以推荐一些书籍或者在线课程。 需要检查是否有遗漏的部分,比如是否提到监控和日志管理,或者与其他工具集成,比如CI/CD。不过作为学习路径,可能先集中在核心内容,高级话题可以后续扩展。 最后,确保结构清晰,步骤由浅入深,让用户能够循序渐进地学习。避免使用过于专业的术语,保持解释的易懂性。同时,注意使用正确的Markdown格式,特别是数学公式部分,不过在这个问题中可能用不上,但需要遵守系统指令中的格式要求。</think>以下是分阶段Docker学习路径(建议配合实践操作): 一、基础入门阶段(1-2周) 1. 核心概念理解 - 容器与虚拟机的本质区别(资源隔离 vs 硬件虚拟化) - 镜像分层存储原理(联合文件系统) - 容器生命周期管理(创建→运行→停止→销毁) 2. 环境搭建 ```bash # Linux安装示例 curl -fsSL https://get.docker.com | bash -s docker sudo systemctl enable --now docker ``` 3. 基础指令实践 ```bash docker run -d -p 80:80 --name web nginx:alpine # 启动Nginx容器 docker exec -it web sh # 进入容器shell docker logs --tail 50 web # 查看日志 ``` 二、进阶应用阶段(2-4周) 1. Dockerfile编写技巧 ```dockerfile FROM python:3.9-slim WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt CMD ["gunicorn", "--bind", "0.0.0.0:8000", "app:app"] ``` 2. 数据持久化方案 ```bash docker volume create db-data docker run -d -v db-data:/var/lib/mysql mysql:8.0 ``` 3. 网络配置实践 ```bash docker network create app-net docker run -d --net=app-net --name db redis:6 docker run -d --net=app-net -p 8080:80 webapp ``` 三、生产级部署阶段(1-2个月) 1. Docker Compose编排 ```yaml version: '3.8' services: web: build: . ports: - "5000:5000" depends_on: - redis redis: image: "redis:alpine" ``` 2. 镜像优化策略 - 多阶段构建(减少最终镜像体积) - 安全扫描(使用docker scan) - 镜像签名验证 3. 容器监控方案 ```bash docker stats # 实时资源监控 docker run -d -p 8080:8080 -v /var/run/docker.sock:/var/run/docker.sock dockersamples/visualizer ``` 四、持续学习建议 1. 官方文档精读(https://docs.docker.com) 2. 实验平台练习(推荐Play with Docker) 3. 参与社区项目(Docker GitHub仓库issue区) 4. 云原生技术延伸(Kubernetes、Service Mesh) 重点实践项目建议: 1. 构建完整LNMP环境 2. 实现CI/CD流水线 3. 搭建微服务架构演示系统 4. 容器安全加固实验 避坑指南: - 避免使用latest标签 - 容器内不要存储重要数据 - 生产环境限制容器资源配额 - 定期更新基础镜像版本 学习资源推荐: - 《Docker——容器与容器云(第2版)》 - 极客时间《深入剖析Kubernetes》(前4章) - Docker官方认证课程(DCA) - Katacoda交互式学习平台 建议每天保持1小时实践时间,通过实际项目巩固知识体系。遇到问题时,善用docker inspect命令分析容器状态,多查阅Docker官方文档的CLI参考手册。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值