Docker入门简易教程 -- 通俗易懂 +足够使用

Docker入门简易教程 -- 通俗易懂 +足够使用_第1张图片


文章目录

      • 1. 概述
      • 2. Docker安装
        • 1.1 安装
        • 1.2 中央仓库
      • 3. 常用操作
        • 3.1 镜像操作
        • 3.2 容器操作
      • 4. Mysql安装实例
        • 4.1 拉取镜像、启动容器
        • 4.2 添加安全组
        • 4.3 客户端连接
      • 5. 数据卷
      • 6. 自定义镜像
      • 7. docker-compose
        • 7.1 安装
        • 7.2 使用
        • 7.3 常用命令
      • 8. 参考


DOCKER


Docker入门简易教程 -- 通俗易懂 +足够使用_第2张图片



1. 概述

Docker是一个开源的应用容器引擎,一个轻量级容器技术。它支持将软件编译成一个镜像,然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像。

docker中常见的概念有:

Docker入门简易教程 -- 通俗易懂 +足够使用_第3张图片

  • 主机(Host):安装了docker程序的机器(docker直接安装在操作系统之上);
  • 客户端(Client):连接docker主机进行操作;
  • 仓库(Registry):用来保存各种打包好的软件镜像;
  • 镜像(Images):软件打包好的镜像;放在docker仓库中;
  • 容器(Container):镜像启动后的实例称为一个容器;容器是独立运行的一个或一组应用

dokcer的使用步骤:

  • 安装docker
  • Docker仓库中搜索需要的软件对应的镜像
  • 使用docker运行镜像,镜像会生成对应的docker容器
  • 对容器的启动停止等价于对软件的相应操作

2. Docker安装

1.1 安装

这里以centos为例进行说明如何安装docker:

  • 首先使用uname -r命令查看内核版本,确保是3.10及以上

    [root@izbp15ffbqqbe97j9dcf5dz ~]# uname -r
    3.10.0-514.26.2.el7.x86_64
    
  • 安装docker所需的依赖环境

    [root@izbp15ffbqqbe97j9dcf5dz ~]#yum -y install yum-utils device-mapper-persistent-data lvm2
    
  • 修改镜像源为国内的阿里镜像源,便于加速后续镜像的拉取

    [root@izbp15ffbqqbe97j9dcf5dz ~]#yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
  • 使用yum install docker命令安装docker

    [root@izbp15ffbqqbe97j9dcf5dz ~]# yum install docker
    Loaded plugins: fastestmirror, product-id, search-disabled-repos, subscription-manager
    
    This system is not registered with an entitlement server. You can use subscription-manager to register.
    
    Loading mirror speeds from cached hostfile
    Package 2:docker-1.13.1-161.git64e9980.el7_8.x86_64 already installed and latest version
    Nothing to do
    
  • 使用systemctl start docker命令启动docker

    [root@izbp15ffbqqbe97j9dcf5dz ~]# systemctl start docker
    [root@izbp15ffbqqbe97j9dcf5dz ~]# docker -v
    Docker version 1.13.1, build 64e9980/1.13.1
    
  • 使用命令systemctl enable docker设置docker为开机自启

    [root@izbp15ffbqqbe97j9dcf5dz ~]# systemctl enable docker
    Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
    
  • 测试docker是否正常运行:运行docker run hello-world命令

    [root@iZbp15ffbqqbe97j9dcf5dZ ~]# docker run hello-world
    Unable to find image 'hello-world:latest' locally
    latest: Pulling from library/hello-world
    0e03bdcc26d7: Pull complete 
    Digest: sha256:49a1c8800c94df04e9658809b006fd8a686cab8028d33cfba2cc049724254202
    Status: Downloaded newer image for hello-world:latest
    
    Hello from Docker!
    This message shows that your installation appears to be working correctly.
    
    To generate this message, Docker took the following steps:
     1. The Docker client contacted the Docker daemon.
     2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
        (amd64)
     3. The Docker daemon created a new container from that image which runs the
        executable that produces the output you are currently reading.
     4. The Docker daemon streamed that output to the Docker client, which sent it
        to your terminal.
    
    To try something more ambitious, you can run an Ubuntu container with:
     $ docker run -it ubuntu bash
    
    Share images, automate workflows, and more with a free Docker ID:
     https://hub.docker.com/
    
    For more examples and ideas, visit:
     https://docs.docker.com/get-started/
    
    
    
  • 如果要停止docker运行,可以使用systemctl stop docker


1.2 中央仓库

拉取docker镜像时,通常有如下的几种选择:

  • Docker官方的中央仓库:像最全的,但是下载速度较慢

  • 国内的镜像网站:daoCloud

  • 采用私服的方式拉取镜像(添加配置):需要创建 /etc/docker/daemon.json,并添加如下内容

{
	"registry-mirrors":["https://registry.docker-cn.com"],
	"insecure-registries":["ip:port"]
}

#重启两个服务
systemctl daemon-reload
systemctl restart docker


3. 常用操作

3.1 镜像操作

操作 命令 说明
检索 docker search 关键字 eg:docker
search redis
在docker hub上检索所需的软件的镜像信息
拉取 docker pull 镜像名:tag :tag可选,默认为latest,即最新版本
查询列表 docker images 查看所有本地镜像
删除 docker rmi image-id 删除指定的本地镜像

Docker入门简易教程 -- 通俗易懂 +足够使用_第4张图片

其中镜像拉取可以直接使用想要拉取的镜像名,此时默认拉取的是最新版;或者到仓库中查询所需的镜像版本,然后再进行拉取。


Docker入门简易教程 -- 通俗易懂 +足够使用_第5张图片

另外有关镜像的导入和导出的命令有:

命令 描述
导出镜像 docker save -o 导出的路径 镜像id
导入本地镜像 docker load -i 镜像文件
修改镜像文件 docker tag 镜像id 新镜像名称:版本

3.2 容器操作

拉取完想要的镜像后,需要启动容器来进行使用。容器常用的有关操作如下:

操作 命令 说明
根据镜像启动容器 docker run ‐‐name mytomcat ‐d tomcat:latest
查看运行中的容器 docker ps
停止运行中的容器 docker stop 容器id
停止所有的容器 docker stop $(docker ps -qa)
启动容器 docker start 容器id
重启容器 docker restart 容器id
删除一个容器 docker rm 容器id
删除全部容器 docker rm $(docker ps -qa)
启动一个做了端口映射的容器 docker run ‐d ‐p 8888:8080 tomcat -d:后台运行;-p: 将主机的端口映射到容器的一个端口
查看容器的日志 docker logs container‐name/container‐id

示例:


Docker入门简易教程 -- 通俗易懂 +足够使用_第6张图片

其中操作命令中所需的容器id不需要填写完整,只需要让docker可以区分此时要操作的是哪一个容器即可。


4. Mysql安装实例

4.1 拉取镜像、启动容器

  • 安装:docker pull mysql

    [root@izbp15ffbqqbe97j9dcf5dz ~]# docker pull mysql
    Using default tag: latest
    Trying to pull repository docker.io/library/mysql ...
    latest: Pulling from docker.io/library/mysql
    8559a31e96f4: Pull complete
    d51ce1c2e575: Pull complete
    c2344adc4858: Pull complete
    fcf3ceff18fc: Pull complete
    16da0c38dc5b: Pull complete
    b905d1797e97: Pull complete
    4b50d1c6b05c: Pull complete
    c75914a65ca2: Pull complete
    1ae8042bdd09: Pull complete
    453ac13c00a3: Pull complete
    9e680cd72f08: Pull complete
    a6b5dc864b6c: Pull complete
    Digest: sha256:8b7b328a7ff6de46ef96bcf83af048cb00a1c86282bfca0cb119c84568b4caf6
    Status: Downloaded newer image for docker.io/mysql:latest
    
    
  • 端口映射:docker run ‐p 3306:3306 ‐‐name mysql01 ‐e MYSQL_ROOT_PASSWORD=123456 ‐d mysql

  • 使用mysql

  • 使用docker run ‐‐name some‐mysql ‐e MYSQL_ROOT_PASSWORD=my‐secret‐pw ‐d mysql:tag ‐‐character‐setserver=utf8mb4 ‐‐collation‐server=utf8mb4_unicode_ci可以指定mysql的一些配置参数

客户端远程连接docker容器中的mysql 报1251错误,解决方案如下

  • 进入容器:docker exec -it 容器id bash
  • 进入mysql:mysql -uroot -p
  • 对远程连接进行授权:GRANT ALL ON *.* TO 'root'@'%';
  • 更改密码的加密规则:ALTER USER 'root'@'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
  • 更改root密码:ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
  • 刷新权限:FLUSH PRIVILEGES;`

4.2 添加安全组

除了进行数据库的相关设置外,还需要配置服务器的安全规则。点击云控制平台左侧的网络与安全 --> 安全—> 配置规则。


安全组

然后按照以下方式手动添加安全规则


Docker入门简易教程 -- 通俗易懂 +足够使用_第7张图片

4.3 客户端连接

配置数据库连接的端口号、用户名和密码

Docker入门简易教程 -- 通俗易懂 +足够使用_第8张图片

连接成功


Docker入门简易教程 -- 通俗易懂 +足够使用_第9张图片



5. 数据卷

数据卷(volume)用于宿主机的一个目录映射到容器中的一个指定的目录中,这样当宿主机操作目录中的内容,那么容器中映射的文件也会随之改变。数据卷常用的命令有:

操作 命令
创建数据卷 docker volume create 数据卷名称
查看所有的数据卷 docker volume ls
查看数据卷详情 docker volume inspect 数据卷名称
删除数据卷 docker volume rm 数据卷名称
容器映射数据卷 docker run -d -p 8080:8080 --name tomcat -v 数据卷名称:容器内部的路径 镜像id
docker run -d -p 8080:8080 --name tomcat -v 路径(/root/自己创建的文件夹):容器内部的路径 镜像id

Docker入门简易教程 -- 通俗易懂 +足够使用_第10张图片



6. 自定义镜像

自定义镜像需要创建对应的Dockerfile文件,文件中常用的命令有:

  • from:指定当前自定义镜像依赖的环境
  • copy:将相对路径下的内容复制到自定义镜像中
  • workdir:声明镜像的默认工作目录
  • run:执行的命令,可以编写多个
  • cmd:需要执行的命令(在workdir下执行的,cmd可以写多个,只以最后一个为准)

编写好Dockerfile文件后,使用命令docker build -t 镜像名[:tag] ./来生成镜像。

例如,此时目录下放入了Spring Boot项目的jar包blog.jar,编写的Dockerfile文件内容如下所示:

FROM daocloud.io/library/tomcat:8.5.15-jre8
RUN mkdir /opt/app
COPY blog.jar /opt/app/
EXPOSE 8080
CMD ["java", "-jar", "/opt/app/blog.jar"]

执行命令生成镜像。通过docker images,命令可以看到,自定义的镜像已经在docker的镜像列表中。


Docker入门简易教程 -- 通俗易懂 +足够使用_第11张图片



7. docker-compose

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

7.1 安装

官方文档中提供了一种安装方式,但是国内因为网络问题大概率安装不成功。

前面都是使用docker run ...来启动容器运行镜像,另外更好的一种方式是使用docker-compose。首先需下载docker-compose的压缩包,下载地址:link。下载成功后将其上传到服务器上,并赋予执行权限。另外为了后续操作的方便,这里将其重命名为docker-compose

mv docker-compose-Linux-x86_64 docker-compose
chmod 777 docker-compose

将docker-compse文件移动到/usr/local/bin目录下,并在/etc/profile中配置环境变量,这样就可以在任意目录下使用docker-compose命令。

mv docker-compose /usr/local/bin
vi /etc/profile
#添加内容:export PATH=$JAVA_HOME:/usr/local/bin:$PATH
source /etc/profile

执行docker-compose命令,如果看到如下界面,表示安装成功。


Docker入门简易教程 -- 通俗易懂 +足够使用_第12张图片

7.2 使用

下面我们使用docker-compose的方式来安装Mysql。首先,需要编写一个docker-compose.yml文件,文件内容如下:

version: '3.1'
services:
  mysql:           # 服务的名称
    restart: always   # 代表只要docker启动,那么这个容器就跟着一起启动
    image: daocloud.io/library/mysql:8.0.2  # 指定镜像路径
    container_name: mysql  # 指定容器名称
    ports:
      - 3306:3306   #  指定端口号的映射
    environment:
      MYSQL_ROOT_PASSWORD: 123456   # 指定MySQL的ROOT用户登录密码
      TZ: Asia/Shanghai        # 指定时区
    volumes:
     - /opt/docker_mysql/mysql_data:/var/lib/mysql   # 映射数据卷

然后使用docker-compose up -d命令启动容器


Docker入门简易教程 -- 通俗易懂 +足够使用_第13张图片

7.3 常用命令

操作 命令
启动容器 docker-compose up -d
关闭并删除容器 docker-compose down
开启docker-compose维护的容器 docker-compose start
关闭docker-compose维护的容器 docker-compose stop
重启docker-compose维护的容器 docker-compose restart
查看docker-compose维护的容器 docker-compose ps
查看日志 docker-compose logs -f


8. 参考

Docker教程
Docker-2020最新超详细版教程通俗易懂
2020 Docker视频教程

你可能感兴趣的:(Linux)