docker学习文档

docker学习文档
1、什么是docker

百度百科:docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或者Windows机器上,也可以实现虚拟化。

docker三个重要的概念Dockerfile、镜像image、容器container

2、Dockerfile

Dockerfile是用来构建Docker镜像的构建文件,是由一系列的命令和参数构成的脚本。

Dockerfile体系结构

FROM  #基础镜像,当前新镜像是基于哪个镜像的
MAINTAINER  #镜像维护者的姓名和邮箱地址
RUN  #容器构建时需要运行的命令,<命令行命令> 等同于,在终端操作的 shell 命令。
EXPOSE  #当前容器对外暴露出的端口
WORKDIR  #指定在创建容器后,终端默认登录进来的工作目录,一个落脚点
ENV  #用来在构建镜像过程中设置环境变量
ADD  #将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
COPY  #类似ADD,拷贝文件和目录到镜像中。将从构建上下文目录中<源路径>的文件/目录复制到新的一层的镜像内的<目标路径>位置
VOLUME  #容器数据卷,用于数据保存和持久化工作
CMD  #指定一个容器启动时要运行的命令。Dockerfile中可以有多个CMD指令,但只要最后一个生效,CMD会被docker run之后的参数替换
ENTRYPOINT  #指定一个容器启动时要运行的命令。ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及参数
ONBUILD  #当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发
3、镜像image

镜像是一种轻量级的、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。

展示所有镜像

E:\docker_test>docker images
REPOSITORY                 TAG         IMAGE ID       CREATED         SIZE
tomcat-test                latest      5324eb51e988   3 hours ago     327MB
mysql                      5.6         0ebb5600241d   8 days ago      302MB
afen139docker/mydocker     test        b7a9950157d4   12 days ago     159MB
friendlyhello              latest      b7a9950157d4   12 days ago     159MB
ubuntu                     latest      f643c72bc252   4 weeks ago     72.9MB
hello-world                latest      bf756fb1ae65   12 months ago   13.3kB
microsoft/dotnet-samples   aspnetapp   575d85b4a69b   22 months ago   263MB
tomcat                     9.0.0.M15   d8a27fa137dc   3 years ago     335MB

搜索镜像

E:\docker_test>docker search mysql
NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                             MySQL is a widely used, open-source relation…   10326     [OK]
mariadb                           MariaDB is a community-developed fork of MyS…   3825      [OK]
mysql/mysql-server                Optimized MySQL Server Docker images. Create…   754                  [OK]
percona                           Percona Server is a fork of the MySQL relati…   518       [OK]
centos/mysql-57-centos7           MySQL 5.7 SQL database server                   86
mysql/mysql-cluster               Experimental MySQL Cluster Docker images. Cr…   79
centurylink/mysql                 Image containing mysql. Optimized to be link…   60                   [OK]
bitnami/mysql                     Bitnami MySQL Docker Image                      47                   [OK]
deitch/mysql-backup               REPLACED! Please use http://hub.docker.com/r…   41                   [OK]
tutum/mysql                       Base docker image to run a MySQL database se…   35
databack/mysql-backup             Back up mysql databases to... anywhere!         34
prom/mysqld-exporter                                                              33                   [OK]
schickling/mysql-backup-s3        Backup MySQL to S3 (supports periodic backup…   29                   [OK]

拉取镜像

docker pull 镜像名:版本号(没有版本号即拉取最新的)

E:\docker_test>docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql
6ec7b7d162b2: Pull complete
fedd960d3481: Pull complete
7ab947313861: Pull complete
64f92f19e638: Pull complete
3e80b17bff96: Pull complete
014e976799f9: Pull complete
59ae84fee1b3: Pull complete
ffe10de703ea: Pull complete
657af6d90c83: Downloading [===============================>                   ]  71.21MB/112.8MB
98bfb480322c: Download complete
6aa3859c4789: Download complete
1ed875d851ef: Download complete

删除镜像

docker rmi 文件名/ID

E:\docker_test>docker rmi 5324eb51e988
E:\docker_test>docker rmi mysql:latest

构建个人镜像

创建Dockerfile文件并编辑:

FROM tomcat:9.0.0.M15								#基础镜像为tomcat:9.0.0.M15
MAINTAINER huangbin <huangbin139email@163.com>		#指定作者及邮箱
COPY behavior.war /usr/local/tomcat/webapps			#将当前目录下的war包复制到/usr/local/tomcat/webapps目录下
RUN echo "Asia/Shanghai" > /etc/timezone			#指定时区为上海

打开命令窗口构造镜像:

docker build -t tomcat_demo:v1 .

tomcat_demo:v1		#镜像名:标签(可理解为版本号)
.					#文件路径,说明构造镜像所需的文件在当前文件夹下
E:\docker_Dockerfile\docker_mysql>docker build -t tomcat_demo:v1 .
[+] Building 0.7s (7/8)
[+] Building 0.8s (7/8)
[+] Building 0.9s (7/8)
[+] Building 1.0s (8/8) FINISHED                                                         0.1s
 => naming to docker.io/library/tomcat_demo:v1
4、容器container

容器是用镜像创建的示例。它可以被启动、开始、停止、删除。每个容器都是互相隔离的、保证安全的平台。可以把容器看作简易版的Linux系统(包括root用户权限、用户空间和网络空间等等)和运行在其中的应用程序。

使用镜像启动一个容器

E:\docker_test>docker run -it ubuntu /bin/bash
root@22b9b9bf6c02:/#

-i:交互式操作;

-t:终端;

ubuntu:镜像;

/bin/bash:放在镜像后面是命令,这里我们希望有个交互式Shell,因此用的是/bin/bash,故命令运行完成后进入镜像终端。

使用tomcat镜像启动一个tomcat容器

E:\docker_test>docker run --name tomcat_MT -d -p 8081:8080 tomcat:9.0.0.M15
6788350eed1a1704a9bc65fab9dc2cfed7a54577cbfcd24e583454432303a97e

启动镜像并和某个启动的容器链接

docker run -d -p 8090:8080 --name behavior_test02 --link mysql_container:mysql docker_behavior:v2

启动mysql镜像

docker run -d -p 3306:3306 --name mysql_container -e MYSQL_ROOT_PASSWORD=PASSWORD mysql:v1

查看结果

E:\docker_test>docker ps
CONTAINER ID   IMAGE              COMMAND             CREATED          STATUS          PORTS                    NAMES
6788350eed1a   tomcat:9.0.0.M15   "catalina.sh run"   30 seconds ago   Up 29 seconds   0.0.0.0:8081->8080/tcp   tomcat_MT

查看正在运行的容器

E:\docker_test>docker ps
CONTAINER ID   IMAGE              COMMAND             CREATED         STATUS         PORTS                    NAMES
6788350eed1a   tomcat:9.0.0.M15   "catalina.sh run"   4 minutes ago   Up 4 minutes   0.0.0.0:8081->8080/tcp   tomcat_MT

查看所有容器

E:\docker_test>docker ps -a
CONTAINER ID   IMAGE                         COMMAND                  CREATED       STATUS                         PORTS                    NAMES
6788350eed1a   tomcat:9.0.0.M15              "catalina.sh run"        2 hours ago   Up 2 hours                     0.0.0.0:8081->8080/tcp   tomcat_MT
22b9b9bf6c02   ubuntu                        "/bin/bash"              2 hours ago   Exited (0) 2 hours ago                                  nervous_ardinghelli
4c751ccc724c   mysql:5.6                     "docker-entrypoint.s…"   6 days ago    Exited (0) About an hour ago                            mysql_container
3877f1ec03dd   tomcat:9.0.0.M15              "catalina.sh run"        8 days ago    Exited (143) 5 days ago                                 tomcat_M15
dcefb334e324   afen139docker/mydocker:test   "python app.py"          12 days ago   Exited (137) 12 days ago                                brave_wing
30e3b74df6b2   friendlyhello                 "python app.py"          12 days ago   Exited (137) 12 days ago                                stoic_chaum
b2fb618fb12d   ubuntu                        "bash"                   2 weeks ago   Exited (0) 2 weeks ago                                  sleepy_kare
0503f60967fe   hello-world                   "/hello"                 2 weeks ago   Exited (0) 2 weeks ago                                  naughty_agnesi
3a4ef941bc1d   hello-world                   "/hello"                 3 weeks ago   Exited (0) 3 weeks ago                                  stoic_wu

启动容器

docker start

E:\docker_test>docker start 4c751ccc724c
4c751ccc724c

停止容器

docker stop

E:\docker_test>docker stop 4c751ccc724c
4c751ccc724c

删除容器

docker rm

E:\docker_test>docker rm 6788350eed1a
6788350eed1a

重启容器

docker restart

E:\docker_test>docker restart 4c751ccc724c
4c751ccc724c

进入容器(tomcat)

E:\docker_test>docker exec -it 3877f1ec03dd /bin/bash

E:\docker_test>docker exec -it 3877f1ec03dd /bin/bash
root@3877f1ec03dd:/usr/local/tomcat# ls -l
total 120
-rw-r----- 1 root root  57092 Dec  5  2016 LICENSE
-rw-r----- 1 root root   1804 Dec  5  2016 NOTICE
-rw-r----- 1 root root   6709 Dec  5  2016 RELEASE-NOTES
-rw-r----- 1 root root  15946 Dec  5  2016 RUNNING.txt
drwxr-x--- 2 root root   4096 Jan 17  2017 bin
drwx--S--- 1 root root   4096 Dec 22 00:47 conf
drwxr-sr-x 3 root staff  4096 Jan 17  2017 include
drwxr-x--- 2 root root   4096 Jan 17  2017 lib
drwxr-x--- 1 root root   4096 Dec 30 11:05 logs
drwxr-sr-x 3 root staff  4096 Jan 17  2017 native-jni-lib
drwxr-x--- 2 root root   4096 Jan 17  2017 temp
drwxr-x--- 7 root root   4096 Dec  5  2016 webapps
drwxr-x--- 1 root root   4096 Dec 22 00:47 work
root@3877f1ec03dd:/usr/local/tomcat#

导出容器

docker export > 目录及文件名

docker export 3877f1ec03dd > ./docker/tomcat.tar

解释:将ID为3877f1ec03dd的容器导出到当前文件夹的docker文件夹下,且文件名为tomcat.tar

导入容器

widows:

type 目录/文件 | docker import - 容器名:版本号

linux:

cat 目录/文件 | docker import - 容器名:版本号

E:\docker_test>type tomcat.tar | docker import - tomcat-test
sha256:5324eb51e988d25244d0d249f69e4cf5fd16cd2515944020afc9864841f08238

E:\docker_test>docker ps -a
CONTAINER ID   IMAGE                         COMMAND                  CREATED       STATUS                     PORTS                    NAMES
4c751ccc724c   mysql:5.6                     "docker-entrypoint.s…"   6 days ago    Up 2 hours                 0.0.0.0:3307->3306/tcp   mysql_container
3877f1ec03dd   tomcat:9.0.0.M15              "catalina.sh run"        8 days ago    Exited (143) 5 days ago                             tomcat_M15
dcefb334e324   afen139docker/mydocker:test   "python app.py"          12 days ago   Exited (137) 12 days ago                            brave_wing
30e3b74df6b2   friendlyhello                 "python app.py"          12 days ago   Exited (137) 12 days ago                            stoic_chaum
b2fb618fb12d   ubuntu                        "bash"                   2 weeks ago   Exited (0) 2 weeks ago                              sleepy_kare
0503f60967fe   hello-world                   "/hello"                 2 weeks ago   Exited (0) 2 weeks ago                              naughty_agnesi
3a4ef941bc1d   hello-world                   "/hello"                 3 weeks ago   Exited (0) 3 weeks ago                              stoic_wu
5、docker 仓库管理
5.1 将镜像上传到个人仓库

标记镜像

docker tag mysql_demo:v7 afen139docker/mysql_test:1.0

推送镜像

docker push afen139docker/mysql_test:1.0

登录docker.hub查看镜像

5.2 从个人仓库拉取镜像
docker pull afen139docker/mysql_test:1.0
6 docker-compose 服务

使用docker-compose启动spring boot和mysql等多服务

创建docker-compose.yml文件并编辑:

version: '3'								#版本号
services:									#需要启动的服务
  mysql:									#启动的服务名称
    image: afen139docker/mysql_test:1.0		#启动的镜像,若镜像不在本地会自动去仓库拉取
    container_name: mysql					#容器的名称
    ports:									#映射的端口号
      - "3360:3306"							#将容器的3306端口映射到宿主机3360上,可以通过访问宿主机3360端口从而访问容器
    command: [								#启动镜像需要运行的命令
      '--character-set-server=utf8mb4',		#设置字符编码
      '--collation-server=utf8mb4_unicode_ci',	#设置储存方式
      '--default-time-zone=+8:00'			#将默认时间加8个小时
    ]
    environment:							#设置环境
      MYSQL_DATABASE: lg_behavior			#设置使用的数据库
      MYSQL_ROOT_PASSWORD: root				#设置数据库root用户的密码
      MYSQL_ROOT_HOST: '%'					#设置所有IP地址都可以使用该账号连接数据库,可以改为特定的IP地址或网段
    restart: always							#容器总是重启
    networks:								#配置容器连接的网络
      - net-behavior-mysql
  behavior:									#启动的服务名称
    image: afen139docker/behavior_demo:1.0	#启动的镜像
    container_name: behavior_test01			#容器的名称
    ports:									#映射的端口号
      - "8088:8080"
    volumes:								#将宿主机的数据卷挂载到容器中,可以通过此方法实现将日志以及配置文件同步到宿主机
      - D:\behavior\logs\log:/usr/local/logs/log	#宿主机和容器目录间的映射
    depends_on:								#说明服务依赖于那个服务,在当前服务启动前先启动依赖服务
      - mysql
    links:									#建立容器间的连接
      - "mysql"
    restart: always							#容器总是重启
    networks:								#配置容器连接的网络
      - net-behavior-mysql
    environment:							#设置环境
      - TZ=Asia/Shanghai					
networks:									#配置网络
  net-behavior-mysql:
    driver: bridge

打开命令窗口,启动多服务:

docker-compose up		#实时显示日志	
docker-compose up -d	#后台运行,不显示日志
E:\docker_compose\compose_demo02>docker-compose up
Creating network "compose_demo02_net-behavior-mysql" with driver "bridge"
Pulling mysql (afen139docker/mysql_test:1.0)...
1.0: Pulling from afen139docker/mysql_test
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker 是一个开源的容器化平台,它可以让开发者将应用程序和其依赖项打包成一个容器,使得应用程序在不同的环境中都能够运行。Docker 提供了一种新的方式来构建、部署和运行应用程序,它可以大大降低开发和运维成本,提高应用程序的可移植性和可靠性。 本文将介绍 Docker 的基础知识,包括 Docker 的安装、镜像和容器的管理、容器的网络和存储等方面。 ## Docker 的安装 Docker 官方支持多个操作系统,包括 Linux、Windows 和 macOS。在不同的操作系统中,Docker 的安装方式也有所不同。在 Linux 系统中,可以通过以下命令来安装 Docker: ```shell curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh ``` 在 Windows 和 macOS 中,可以下载 Docker Desktop 来安装 Docker。 ## Docker 镜像和容器的管理 Docker 镜像是应用程序和其依赖项的打包格式,可以通过 Dockerfile 来定义。Dockerfile 是一个文本文件,其中包含了应用程序的构建规则和依赖项的安装方式。通过 Dockerfile 构建的镜像可以上传到 Docker Hub 或者私有仓库中,其他人可以通过 Docker Hub 或者私有仓库来获取镜像。 创建 Docker 镜像的方式很多,可以通过手动构建、基于现有镜像构建、使用 Docker Compose 等方式来创建镜像。以下是一个基于 Ubuntu 镜像创建 Node.js 应用程序的 Dockerfile: ```dockerfile FROM ubuntu:18.04 RUN apt-get update && apt-get install -y nodejs npm COPY . /app WORKDIR /app RUN npm install EXPOSE 3000 CMD ["npm", "start"] ``` 通过以上 Dockerfile 可以构建出一个包含 Node.js 应用程序的镜像。接下来,我们可以使用如下命令来启动容器: ```shell docker run -p 3000:3000 -d my-node-app ``` 其中,-p 参数指定了容器端口和主机端口的映射关系,-d 参数指定了容器在后台运行。 通过 docker ps 命令可以查看正在运行的容器,通过 docker stop 和 docker start 命令可以停止和启动容器。 ## 容器的网络和存储 Docker 容器之间可以通过网络进行通信,Docker 提供了多种网络模式,包括桥接模式、主机模式、容器模式和覆盖网络模式等。在默认情况下,Docker 容器使用桥接网络模式,可以通过以下命令创建一个自定义的网络: ```shell docker network create my-network ``` 通过 --net 参数可以将容器加入到指定的网络中。例如,通过以下命令创建一个基于自定义网络的容器: ```shell docker run --name my-nginx -p 80:80 --net my-network -d nginx ``` Docker 容器还可以使用本地存储或者云存储来存储数据。Docker 提供了多种存储驱动程序,包括 overlay2、aufs 和 devicemapper 等。通过以下命令可以创建一个本地存储卷: ```shell docker volume create my-volume ``` 通过 -v 参数可以将容器挂载到指定的存储卷上。例如,通过以下命令创建一个基于本地存储卷的容器: ```shell docker run --name my-mysql -v my-volume:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=password -d mysql ``` 以上是 Docker 的基础知识介绍,Docker 还有很多高级功能和应用场景,例如 Docker Compose、Docker Swarm 和 Kubernetes 等。学习 Docker 可以让我们更好地理解容器化技术和云原生应用程序的开发和部署。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值