Docker安装使用教程

Docker

Docker安装

1、卸载旧的

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

2、安装必备的环境

sudo yum install -y yum-utils

3、设置镜像仓库的地址

sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo #是国外的,很慢,不要用
    
sudo yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #推荐使用阿里云的

4、更新yum软件包的索引

yum makecache fast

5、安装docker

sudo yum install docker-ce docker-ce-cli containerd.io

6、启动docker

systemctl start docker

7、下载hello-world镜像并启动容器

docker run hello-world

8、卸载docker

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

sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd

9、配置阿里云镜像加速

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

.

Docker服务

  • systemctl start docker:开启docker。

  • systemctl stop docker:关闭docker。

  • systemctl enable docker:将docker服务设为开机启动。

  • docker version:查看docker版本号。

  • docker info:也是查看信息的。

  • docker –help:可以查看docker的命令。

.

Docker镜像

  • docker search mysql:查询mysql镜像。

  • docker rmi -f + 镜像id/镜像名字:版本号:强制删除镜像。

  • docker rmi -f 镜像1的id 镜像2的id:删除多个镜像。

  • docker rmi -f $(docker images -aq):删除所有镜像。

  • docker pull mysql:5.7.32 下载5.7.32版本的mysql。

  • docker images:查看所有下载好的镜像。

    • -a:列出本地所有镜像
    • -q:只列出镜像ID
    • –digests:显示镜像的摘要信息
    • –no-trunc:显示完整的镜像信息
  • whereis logstash:查看logstash在哪。

  • docker tag:给镜像打标签,相当于把该镜像复制一份改一个名字。

#比如现在有一个centos镜像
[root@localhost ~]$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              latest              1e1148e4cc2c        2 weeks ago         202MB
    
#我对于centos进行了开发,开发了一个版本,我就可以对这个版本进行打标签,打完标签就会生成新的镜像
#格式为:docker tag from_image new_image:版本号
[root@localhost ~]$ docker tag centos centos:v1
    
[root@localhost ~]$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              latest              1e1148e4cc2c        2 weeks ago         202MB
centos              v1                  1e1148e4cc2c        2 weeks ago         202MB

.

Docker容器

  • docker ps:查看运行中的容器。

    • -a:查看所有的容器。
    • -n:查看最近n次创建的容器。
    • -q:只显示容器ID。
  • docker stop +容器id/容器名:关闭容器。

  • docker start +容器id/容器名:开启容器。

  • docker restart +容器id/容器名:重启容器。

  • docker kill +容器id/容器名:强制关闭容器。

  • docker rm +容器id:删除容器。

  • docker rm -f +容器id:强制删除容器。

  • docker rm -f $(docker ps -aq):删除所有容器。

  • docker update +容器名/id - -restart=always:设置容器自动重启。

  • docker logs -f +容器id --tail=1000:只显示最后1000行的日志信息

  • docker attach + 容器id/容器名 /bin/bash。

  • docker exec -it + 容器id/容器名 /bin/bash。

  • docker top +容器id/容器名(查看容器的进程)。

  • docker inspect +容器id(查看容器内部细节)

  • docker cp +容器id: 容器文件路径 宿主机的路径==(把容器内部的文件拷贝到宿主机)==。

  • docker cp 宿主机文件路径 容器id: 容器内部路径==(把宿主机的文件复制到容器内部)==。

  • docker load -i tar文件名:将一个tar文件解压到docker仓库

  • docker save 镜像名:tag号 -o 自定义tar文件名:将一个镜像打成tar包保存下来

  • 将容器打包成镜像:docker commit -m "描述信息" -a "作者信息" 容器id 新的镜像名称:自定义标签

.

Dockerfile

Dockerfile概述

主要是通过docker build指令来建立一个自定义的docker镜像

在这里插入图片描述

  • 当docker-client端执行docker build指令后,它会将Dokerfile所在目录作为下上文目录一次性打包发给docker-server端,如果有一些文件不想打包发送过去,只需要建立一个.dockerIgnore文件忽略即可,docker-server端接收之后开始打包构建镜像。
  • Dockerfile里的每一行指令都会使docker-server端生成一个镜像,存储在docker-cache中,方便下一次的读取效率;最终呈现给我们的则是最终镜像。
  • 如果你不想使用上一次的镜像缓存,可以在docker build指令中加入--no-cache,这样每一次就会重新从头开始构建了。

Dockerfile常见指令

  • **FROM:**基础镜像,表示当前镜像是基于哪个父镜像。

  • **MAINTAINER:**镜像维护者的姓名与邮箱地址(已经废弃了)。

  • **RUN:**容器构建的时候需要执行的额外shell命令。

  • **EXPOSE:**当前容器对外暴露的端口号。

  • **WORKDIR:**表示容器启动之后终端默认登录进来的目录,也就是落脚点,不指定的话就代表根目录;WORKDIR可以有多个,如果有相对路径,那么该路径是与上一个WORKDIR指令的路径相对

  • **ENV:**用来在构建镜像过程中设置环境变量。

ENV MY_PATH /user/mytest

WORKDIR $MY_PATH # 就表示我运行容器后的落脚点的目录是/user/mytest
  • **ADD:**就是将宿主机中的文件拷贝到镜像中;如果是压缩包,它会自行解压;还可以是URL地址。

  • **COPY:**跟ADD作用一样,但是不会自行解压压缩包,只是单纯的拷贝。

COPY/ADD ./market-service.jar /vcloud-market-springboot2.jar
  • **VOLUME:**允许docker内部文件可以被挂载出去,如果没有写,则是挂载不出去的。

  • **CMD:**指定一个容器启动时运行的命令,Dockerfile中可以有多个CMD命令,但只有最后一个命令生效最后一个CMD命令会被docker run之后的参数替换掉

    比如:运行docker run -p 6666:8080 tomcat ls -l就不会创建这个Tomcat容器实例,它会实现ls -l这条命令,因为参数已经发生了替换

  • **ENTRYPOINT:**跟CMD作用一样,只不过docker run之后的参数不会被替换,而是会被追加到命令之中执行。

    CMD与ENTRYPOINT配合使用的时候,要写json数组的形式。

    ENTRYPOINT写固定的命令,CMD写常变化的命令。

  • **ONBUILD:**当构建一个被继承的Dockerfile时运行命令,父镜像在被子镜像继承后,父镜像的onbuild就会被触发。

  • **USER:**设定哪个用户可以运行该dockerfile文件。

  • **.dockerignore:**忽略一些东西。

Dockerfile构建含有vim功能的centos7

FROM centos:7
RUN yum install -y vim
# 第二种方式:
["yum","install","-y","vim"]

Dockerfile构建含有Tomcat压缩包的centos7

From centos:7
RUN yum install -y vim
EXPOSE 5672
EXPOSE 15672
WORKDIR /zyh
WORKDIR bb #WORKDIR具有追加功能,是上一个路径下的相对路径;所以落脚点就是docker容器内部的/zyh/bb目录下
COPY ./a.txt /zyh/bb/b.txt # 使用相对路径
ADD https://dlcdn.apache.org/tomcat/tomcat-8/v8.5.71/bin/apache-tomcat-8.5.71.tar.gz /zyh/bb #将tomcat压缩包下载到docker容器的/zyh/bb目录下
RUN tar -zxvf ./apache-tomcat-8.5.71.tar.gz
RUN mv apache-tomcat-8.5.71 tomcat
WORKDIR tomcat
VOLUME /zyh/bb/tomcat/webapps #允许docker容器内部的webapps目录被挂载出来

Dockerfile构建springboot应用

1、先创建一个springboot项目,设置8080端口号

2、建立Dockerfile文件

FROM openjdk:8-jre
WORKDIR /docker01
ADD docker_demo01-0.0.1-SNAPSHOT.jar demo01.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar"]
CMD ["demo01.jar"]

3、生成镜像,运行docker容器

docker build -t demo01:R4.3C01_01_c ./

docker run -d -p 8080:8080 --name demo demo01:R4.3C01_01_c #前一个8080表示外部的,后面的表示docker内部暴露出来的

浏览器访问xxx.xxx.xx.xx:8080/hello

.

Docker Compose

Docker Compose运行示例

比如一个web项目,除了web服务器本身,往往还需要加上mysql、redis、es、mq容器等,为了高效管理docker多个容器,将许多小的容器部署进去,共同组成一个project,一起启动。

1、下载compose

# 要放到/usr/local/bin下,这样我们就不用配置环境变量了
sudo curl -L https://github.com/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

2、授予执行的权限

chmod +x /usr/local/bin/docker-compose

3、查看版本号

[root@xxx bin]# docker-compose -v
docker-compose version 1.25.5, build 8a1c60f6

4、docker-compose.yml文件

version: "3.0"
services:
  tomcat01: #指定服务名唯一
    container_name: tomcat01  #指定容器名,想当于run --name
    image: tomcat:8.0-jre8    #创建当前服务使用的镜像是谁,想当于run image
    ports:
      - "8081:8080"           #宿主机:容器内部,为了防止出错,最好用引号包起来,想当于run -p
    volumes:                  #指定容器卷映射,想当于run -v
      - tomcat01Volume:/usr/local/tomcat/webapps
    networks:                 #指定用的网桥,想当于run --network
      - vcloudnet01

  tomcat02: 
    container_name: tomcat01
    image: tomcat:8.0-jre8
    ports:
      - "8082:8080"
    volumes:                  
      - tomcat02Volume:/usr/local/tomcat/webapps
    networks:                 
      - vcloudnet01
      
  mysql:
    container_name: mysql01
    image: mysql:5.7.32
    ports:
      - "3307:3306"
    volumes:
      - mysqlLog:/var/log/mysql
      - mysqlData:/var/lib/mysql
      - mysqlConf:/etc/mysql
    networks:                 
      - vcloudnet01
    environment:              #设置环境变量
      - MYSQL_ROOT_PASSWORD=123456
      
networks:                     #定义上面服务用到的网桥,可以写多个
  vcloudnet01:
  vcloudnet02:
  
volumes:                      #定义上面服务所需要的挂载出去的数据卷名,可以写多个
  tomcat01Volume:
  tomcat02Volume:
  mysqlLog:
  mysqlData:
  mysqlConf:

5、在docker-compose同级目录下执行docker-compose up -d即可,浏览器访问xxx.xx.xx.xx:8081或者8082都可以。

docker-compose.yaml文件配置

version

表示对应的docker是什么版本,一般3.0就行了。

build

相当于docker build,指定Dockerfile文件生成镜像。

ports

相当于docker run -p,指定暴露的端口号,宿主机:容器内部。

volumes

相当于docker run -v,用于容器卷的挂载有,两种方式。

  • 自定义指定:直接将绝对路径写上去。
version: "3.0"
services:
  tomcat01: #指定服务名唯一
  volumes:
    - /zyh/docker01:/usr/local/tomcat/webapps
  • 自动指定:它会在宿主机上给你自动分配一个地址,用于与容器内部文件进行挂载。
version: "3.0"
services:
  tomcat01: #指定服务名唯一
  volumes:
    - tomcat01Volume:/usr/local/tomcat/webapps
    
volumes: #定义上面服务要挂载出去的数据卷名,可以写多个
  tomcatVolume:

如何查看这个地址被分配到哪了?

#注意:卷名默认会加上该项目的名字(vcloudtest),然后用_进行拼接而成
[root@xxx vcloudtest]# docker volume ls
DRIVER    VOLUME NAME
local     docker-compose_tomcat01Volume
local     docker-compose_tomcat02Volume
local     vcloudtest_tomcat01Volume
local     vcloudtest_tomcat02Volume

#使用docker inspect指令可以查看分配的地址在哪
[root@xxx ~]# docker inspect vcloudtest_tomcat01Volume
[
    {
        "CreatedAt": "2021-10-10T14:05:45+08:00",
        "Driver": "local",
        "Labels": {
            "com.docker.compose.project": "vcloudtest",
            "com.docker.compose.version": "1.25.5",
            "com.docker.compose.volume": "tomcat01Volume"
        },
        "Mountpoint": "/var/lib/docker/volumes/vcloudtest_tomcat01Volume/_data",
        "Name": "vcloudtest_tomcat01Volume",
        "Options": null,
        "Scope": "local"
    }
]

#文件地址就在/var/lib/docker/volumes/vcloudtest_tomcat01Volume/_data下
[root@xxx vcloudtest]# cd /var/lib/docker/volumes/vcloudtest_tomcat01Volume/_data
[root@xxx _data]# ls
docs  examples  host-manager  manager  ROOT
networks

相当于docker run --network,用于指定使用哪个网桥。

version: "3.0"

services:
  tomcat01: #服务名唯一
    container_name: tomcat01
    image: tomcat:8.0-jre8 #创建当前服务使用的镜像是谁
    ports:
      - "8081:8080"
    networks:
      - vcloudnet01
      
networks:                  #定义上面服务用到的网桥,可以写多个
  vcloudnet01:
  vcloudnet02:

如何查看指定的网桥名字?

#默认会加上项目名(vcloudtest),而后用_拼接而成
[root@xxx vcloudtest]# docker network ls
NETWORK ID     NAME                         DRIVER    SCOPE
938d7d8b689c   bridge                       bridge    local
74d586b7aa3d   docker-compose_default       bridge    local
25a8cfc576d4   docker-compose_vcloudnet01   bridge    local
63b49b5bfd90   host                         host      local
09e53334b1d0   none                         null      local
568f617b2843   vcloudtest_default           bridge    local
159181bd7772   vcloudtest_vcloudnet01       bridge    local
environment

设置环境变量,例如MySQL启动需要指定root用户密码。

version: "3.0"
services: 
  mysql:
    container_name: mysql01
    image: mysql:5.7.32
    ports:
      - "3307:3306"
    volumes:
      - mysqlLog:/var/log/mysql
      - mysqlData:/var/lib/mysql
      - mysqlConf:/etc/mysql
    networks:                 
      - vcloudnet01
    environment:              #设置环境变量
      - MYSQL_ROOT_PASSWORD=123456
env_file

用来替换environment参数,防止敏感信息被暴露。

version: "3.0"
services: 
  mysql:
    container_name: mysql01
    image: mysql:5.7.32
    ports:
      - "3307:3306"
    volumes:
      - mysqlLog:/var/log/mysql
      - mysqlData:/var/lib/mysql
      - mysqlConf:/etc/mysql
    networks:                 
      - vcloudnet01
    env_file:
      - ./mysql.env

mysql.env文件:

MYSQL_ROOT_PASSWORD=123456

在当前项目目录下新建mysql.env文件(必须以.env结尾的文件),将environment中要设置的环境变量以key-value的形式放到该文件中即可。

depends_on

配置该服务启动会依赖于哪些服务先行启动。

version: "3.0"

services:
  tomcat01: #服务名唯一
    container_name: tomcat01
    image: tomcat:8.0-jre8 #创建当前服务使用的镜像是谁
    ports:
      - "8081:8080"
    networks:
      - vcloudnet01
    depends_on: #配置该服务启动会依赖于哪些服务先行启动,注意下面的是服务名,而不是容器名
      - tomcat02
      - mysql
build

先利用Dockerfile文件生成镜像再使用该镜像。

version: "3.0"

services:
  demo01: #服务名唯一
    build: #先利用Dockerfile生成镜像而后再使用该镜像
      context: ./docker01 #指定Dockerfile所在的上下文目录
    container_name: demo01 #指定容器名
    ports:
      - "8080:8080"
    networks:
      - vcloudnet01
    depends_on:
      - tomcat01

docker-compose指令

  • docker-compose up -d:后台启动yaml中定义的所有容器。
  • docker-compose down:停止所有容器,并移除网络。
  • docker-compose exec + 服务名:进入指定的容器。
  • docker-compose ps:展示yaml文件中定义的所有容器信息。
  • docker-compose restart + 服务名:重启指定的容器。
  • docker-compose rm -f + 服务名:删除指定的容器。
  • docker-compose top + 服务名:查看指定容器内运行的进程信息。
  • docker-compose pause + 服务名:暂停指定容器。
  • docker-compose unpause + 服务名:恢复指定容器。
  • docker-compose logs -f + 服务名:查看指定容器的日志。

.

Doker安装Tomcat

使用docker创建的Tomcat容器只需要使用curl localhost:8081能够获取到HTML页面即可,宿主机使用浏览器访问不了也无所谓了,是端口映射的问题。

# 指定路径挂载(不推荐),由于宿主机下/zyh/tomcat里面什么都没有,它默认会将容器中的webapps目录下的数据清空,你是访问不了Tomcat首页的。
docker run -d -p 8080:8080 --name:tomcat01 -v /zyh/tomcat:/usr/local/tomcat/webapps tomcat:8.0-jre8

# 不指定路径挂在(推荐),它不但不会将容器中的webapps目录下的数据清空,而会将数据复制到/zyh/tomcat目录下,你是可以访问到首页的。
docker run -d -p 8080:8080 --name:tomcat02 -v tomcatVolume:/usr/local/tomcat/webapps tomcat:8.0-jre8

# tomcatVolume就是数据卷的名字,可以通过docker volume inspect来查看映射的路径在哪
[root@xxx vcloudtest]# docker volume inspect tomcatVolume
[
    {
        "CreatedAt": "2021-12-05T15:03:12+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/tomcatVolume/_data",
        "Name": "tomcatVolume",
        "Options": null,
        "Scope": "local"
    }
]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker是一种开源的容器化平台,可以简化应用程序的部署和管理过程。下面是Docker安装使用教程: 1. 安装Docker: - 对于Windows用户: - 访问Docker官方网站 (https://www.docker.com/products/docker-desktop),点击下载Docker Desktop并按照安装向导进行安装。 - 对于Mac用户: - 访问Docker官方网站 (https://www.docker.com/products/docker-desktop),点击下载Docker Desktop并按照安装向导进行安装。 - 对于Linux用户: - 不同的Linux发行版安装方法有所不同,你可以在Docker官方网站上找到相应的安装指南。 2. 验证Docker安装是否成功: - 打开终端或命令提示符窗口,执行以下命令来验证安装是否成功: ``` docker version ``` - 如果能够看到有关Docker版本信息的输出,说明Docker已经成功安装并可用。 3. 使用Docker: - 运行容器:使用 `docker run` 命令可以运行一个基于镜像创建的容器。例如,要运行一个名为 "hello-world" 的容器,可以执行以下命令: ``` docker run hello-world ``` - 拉取镜像:使用 `docker pull` 命令可以从Docker镜像仓库中拉取一个镜像。例如,要拉取一个名为 "ubuntu" 的Ubuntu镜像,可以执行以下命令: ``` docker pull ubuntu ``` - 列出镜像:使用 `docker images` 命令可以列出本地已经下载的镜像。 - 列出容器:使用 `docker ps` 命令可以列出当前正在运行的容器,添加 `-a` 参数可以显示所有容器,包括已经停止的容器。 - 停止容器:使用 `docker stop` 命令可以停止一个正在运行的容器。例如,要停止一个名为 "my-container" 的容器,可以执行以下命令: ``` docker stop my-container ``` - 删除容器:使用 `docker rm` 命令可以删除一个已经停止的容器。例如,要删除一个名为 "my-container" 的容器,可以执行以下命令: ``` docker rm my-container ``` - 查看容器日志:使用 `docker logs` 命令可以查看容器的日志。例如,要查看一个名为 "my-container" 的容器的日志,可以执行以下命令: ``` docker logs my-container ``` 这只是Docker的一小部分功能,Docker还提供了许多其他功能和命令,例如构建自定义镜像、管理网络等。你可以查阅Docker官方文档以获取更多详细信息和示例。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值