死磕三天总结出Docker小白入门操作指南(建议收藏)

一、Docker简介

Docker 是一个开源的应用容器引擎,基于Go 语言并遵从 Apache2.0 协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)更重要的是容器性能开销极低。

Docker支持将软件编译成镜像;在镜像中支持各种软件配置好并发布,其他使用者可以直接使用配置好的镜像。运行中的镜像称之为容器,容器启动速度很快。类似于封装好的Windows系统,通过U盘直接安装即可,不需要进行系统配置软件。

死磕三天总结出Docker小白入门操作指南(建议收藏)

Docker的应用场景:

  • Web应用的自动化打包发布;
  • 自动化测试和持续集成、发布;
  • 在服务型环境中部署调整数据库或其他的后台应用;
  • 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。

Docker的优点:

  • 快速、一致性的交付应用程序
  • 响应式部署和扩展
  • 充分利用虚拟机资源

二、Docker核心概念

Docker主机(Host):安装了Docker程序的机器(Docker直接安装在操作系统中)

Docker客户端(Client):连接Docker主机进行操作;

Docker容器(Container):镜像启动后的实例,独立运行的一个或一组应用;

Docker镜像(Image):打包好的软件,用于创建Docker容器的模板;

Docker仓库(Respository):用于保存打包好的软件镜像;

关系示意图:

死磕三天总结出Docker小白入门操作指南(建议收藏)

死磕三天总结出Docker小白入门操作指南(建议收藏)

Docker的基本使用方式:

① 在机器中安装Docker;

② 在Docker仓库中寻找这个软件对应的镜像;

③ 使用Docker运行镜像,生成一个Docker容器;

④ 容器的启动或停止相当于对软件的启动和停止;

三、Docker安装

在Linux中安装Docker的步骤

1.检查Linux内核版本,必须是3.10以上
uname -r
若Linux版本内核不符合则需要升级软件包和内核
yum update

2.安装docker
yum install docker

3.查看docker是否安装成功
docker -v

4.启动docker容器
systemctl start docker

5.设置docker开机启用
systemctl enable docker

6.停止docker
systemctl stop docker

设置docker使用阿里云镜像加速

访问阿里云镜像加速器网址 :阿里云镜像加速

死磕三天总结出Docker小白入门操作指南(建议收藏)

四、Docker常用操作

1. 镜像操作

1.1 操作远程镜像

① 查询远程仓库镜像

docker search [OPTIONS]

OPTIONS说明:

  • --automated:只列出 automated build类型的镜像;
  • --no-trunc :显示完整的镜像描述;
  • -s :列出收藏数不小于指定值的镜像。

查询docker远程仓库中的MySQL

[root@izuf6h7blj36dmxbmcj15wz ~]# docker search mysql
INDEX       NAME                                        DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
docker.io   docker.io/mysql                             MySQL is a widely used, open-source relati...   10111     [OK]       
docker.io   docker.io/mariadb                           MariaDB is a community-developed fork of M...   3711      [OK]       
docker.io   docker.io/mysql/mysql-server                Optimized MySQL Server Docker images. Crea...   738                  [OK]
docker.io   docker.io/percona                           Percona Server is a fork of the MySQL rela...   511       [OK]       
docker.io   docker.io/centos/mysql-57-centos7           MySQL 5.7 SQL database server                   84                   
docker.io   docker.io/mysql/mysql-cluster               Experimental MySQL Cluster Docker images. ...   77                   
docker.io   docker.io/centurylink/mysql                 Image containing mysql. Optimized to be li...   60                   [OK]
docker.io   docker.io/bitnami/mysql                     Bitnami MySQL Docker Image                      45                   [OK]
docker.io   docker.io/deitch/mysql-backup               REPLACED! Please use http://hub.docker.com...   41                   [OK]
......

② 拉取远程仓库中的镜像

docker pull [OPTIONS] NAME[:TAG|@DIGEST]

OPTIONS说明:

  • -a :拉取所有 tagged 镜像
  • --disable-content-trust :忽略镜像的校验,默认开启
  • TAG:用于指定版本号

拉取tomcat 7.0镜像

[root@izuf6h7blj36dmxbmcj15wz ~]# docker pull tomcat:7.0
Trying to pull repository docker.io/library/tomcat ... 
7.0: Pulling from docker.io/library/tomcat
e4c3d3e4f7b0: Pull complete 
101c41d0463b: Pull complete 
8275efcd805f: Pull complete 
751620502a7a: Pull complete 
a59da3a7d0e7: Pull complete 
5ad32ac1e527: Pull complete 
27c13473e3bd: Pull complete 
717370f5d395: Pull complete 
84d544041c3b: Pull complete 
4cce74688a50: Pull complete 
Digest: sha256:9c86a5a1af6f7bdc946a28a39b7f05044abd5eee2eb8cf56b55938c8618c85cb
Status: Downloaded newer image for docker.io/tomcat:7.0

docker官方镜像仓库 Docker官方镜像仓库中会介绍使用方法,可以按照官方文档的说明进行操作。

1.2 管理本地镜像

① 查看本地镜像列表

docker images [OPTIONS] [REPOSITORY[:TAG]]

OPTIONS说明:

  • -a :列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);
  • --digests :显示镜像的摘要信息;
  • f :显示满足条件的镜像;
  • --format :指定返回值的模板文件;
  • --no-trunc :显示完整的镜像信息;
  • -q :只显示镜像ID。

查看本地仓库的镜像

[root@izuf6h7blj36dmxbmcj15wz ~]# docker images
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
docker.io/memcached   latest              804901da629f        38 hours ago        82.3 MB
docker.io/tomcat      7.0                 ae42daf81b8c        2 days ago          533 MB
docker.io/mysql       5.7.32              1b12f2e9257b        6 days ago          448 MB

② 删除本地镜像列表

docker rmi [OPTIONS] IMAGE [IMAGE...]

OPTIONS说明:

  • -f :强制删除;
  • --no-prune :不移除该镜像的过程镜像,默认移除;

删除本地仓库中的tomcat

[root@izuf6h7blj36dmxbmcj15wz ~]# docker rmi tomcat:7.0
Untagged: tomcat:7.0
Untagged: docker.io/tomcat@sha256:9c86a5a1af6f7bdc946a28a39b7f05044abd5eee2eb8cf56b55938c8618c85cb
Deleted: sha256:ae42daf81b8c5fd4b2f009d277d062681171d8d84c9f174aba08f6dbd47ed857
Deleted: sha256:3f394bd52132d1cf758651758ac12ebf02b721921b524123ead1e874a1ed9bd6
Deleted: sha256:1174c29e4d812f6dd04484ae909d5c4451fc7d4ecb8cd0934930876ad68985de
Deleted: sha256:24fdd84b4adf4b922767e2b9d336c96fb31cab90c84fb34f9164f6587473e565
Deleted: sha256:984e8d35fe94a287a0bc4a45e8757c75e17e80c3f4fed0b9f9b0ec6b4b457ebb
Deleted: sha256:254cf71da09bbc16e304f925dee4270ac9069649dee8576423a6a77186ee0061
Deleted: sha256:3383e45b22b2b665b1a2604e375c1e7dc007c540e77d6367b1d7ba79ef0030d8
Deleted: sha256:d5d618196ec30fcdba1d210f135b4911b9dbdc79fdd729a9a9c3683a6a9b9308
Deleted: sha256:4bb57adf9037e4da45f2dbc0f84a7e9d8da6847bef3e63d09c8a9d8465f4d2c6
Deleted: sha256:5173011923d00f0fe606ecceda93ea88f17dc77e0b026df802c9aeb31bc1eac6
Deleted: sha256:9780f6d83e45878749497a6297ed9906c19ee0cc48cc88dc63827564bb8768fd
[root@izuf6h7blj36dmxbmcj15wz ~]# docker images
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
docker.io/memcached   latest              804901da629f        38 hours ago        82.3 MB
docker.io/mysql       5.7.32              1b12f2e9257b        6 days ago          448 MB

2. 容器操作

2.1 容器生命周期管理

① 创建一个容器并运行命令

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

OPTIONS说明:

  • -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
  • -d: 后台运行容器,并返回容器ID;
  • -i: 以交互模式运行容器,通常与 -t 同时使用;
  • -P: 随机端口映射,容器内部端口随机映射到主机的端口
  • -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
  • -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
  • --name="nginx-lb": 为容器指定一个名称;
  • --dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
  • --dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
  • -h "mars": 指定容器的hostname;
  • -e username="ritchie": 设置环境变量;
  • --env-file=[]: 从指定文件读入环境变量;
  • --cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;
  • -m :设置容器使用内存最大值;
  • --net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
  • --link=[]: 添加链接到另一个容器;
  • --expose=[]: 开放一个端口或一组端口;
  • --volume , -v: 绑定一个卷

Docker可以通过一个镜像创建多个容器,各个容器之间互不干扰,可以同时运行

② 启动、停止、刷新容器

docker start [OPTIONS] CONTAINER [CONTAINER...]

docker stop [OPTIONS] CONTAINER [CONTAINER...]

docker restart [OPTIONS] CONTAINER [CONTAINER...]

启动已被停止的容器mysql01

[root@izuf6h7blj36dmxbmcj15wz ~]# docker start mysql01

停止运行中的容器mysql01

[root@izuf6h7blj36dmxbmcj15wz ~]# docker stop mysql01

重启容器mysql01shell

[root@izuf6h7blj36dmxbmcj15wz ~]# docker restart mysql01

③ 删除容器

docker rm [OPTIONS] CONTAINER [CONTAINER...]

OPTIONS说明:

  • -f:通过 SIGKILL 信号强制删除一个运行中的容器。
  • -l:移除容器间的网络连接,而非容器本身。
  • -v:删除与容器关联的卷。

④ 创建容器但不启动

docker create [OPTIONS] IMAGE [COMMAND] [ARG...]

语法类似与run的语法

⑤ 在运行的容器中执行命令

docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

OPTIONS说明:

  • -d:分离模式: 在后台运行
  • -i:即使没有附加也保持STDIN 打开
  • -t:分配一个伪终端

进入到MySQL中操作

[root@izuf6h7blj36dmxbmcj15wz ~]# docker exec -it mysql-test /bin/bash
root@86afbc58bd27:/# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 13
Server version: 5.7.32 MySQL Community Server (GPL)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

2.2 容器管理

① 列出所有容器

docker ps [OPTIONS]

OPTIONS说明:

  • -a:显示所有的容器,包括未运行的。
  • -f:根据条件过滤显示的内容。
  • --format:指定返回值的模板文件。
  • -l:显示最近创建的容器。
  • -n:列出最近创建的n个容器。
  • --no-trunc:不截断输出。
  • -q:静默模式,只显示容器编号。
  • -s:显示总的文件大小。

② 查看容器运行日志

docker logs [OPTIONS] CONTAINER

OPTIONS说明:

  • -f: 跟踪日志输出
  • --since:显示某个开始时间的所有日志
  • -t: 显示时间戳
  • --tail:仅列出最新N条容器日志

查看tomcat运行日志

[root@izuf6h7blj36dmxbmcj15wz ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
b88d05801048        tomcat:9.0.39       "catalina.sh run"        17 minutes ago      Up 10 minutes       0.0.0.0:8090->8080/tcp              tomcat9.0
f7d14d73ec4a        memcached           "docker-entrypoint..."   5 days ago          Up 5 days           0.0.0.0:11211->11211/tcp            memcache
86afbc58bd27        mysql:5.7.32        "docker-entrypoint..."   5 days ago          Up 5 days           0.0.0.0:3306->3306/tcp, 33060/tcp   mysql-test
[root@izuf6h7blj36dmxbmcj15wz ~]# docker logs tomcat9.0
2020-11-03T01:45:26.595757000Z 03-Nov-2020 01:45:26.593 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home:             /usr/local/openjdk-11
2020-11-03T01:45:26.595845000Z 03-Nov-2020 01:45:26.593 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version:           11.0.9+11
2020-11-03T01:45:26.595933000Z 03-Nov-2020 01:45:26.593 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor:            Oracle Corporation
2020-11-03T01:45:26.596033000Z 03-Nov-2020 01:45:26.593 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE:         /usr/local/tomcat
2020-11-03T01:45:26.605849000Z 03-Nov-2020 01:45:26.600 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME:         /usr/local/tomcat
2020-11-03T01:45:26.636942000Z 03-Nov-2020 01:45:26.634 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.lang=ALL-UNNAMED
2020-11-03T01:45:26.637118000Z 03-Nov-2020 01:45:26.634 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.io=ALL-UNNAMED
2020-11-03T01:45:26.637215000Z 03-Nov-2020 01:45:26.634 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
2020-11-03T01:45:26.637307000Z 03-Nov-2020 01:45:26.634 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties
2020-11-03T01:45:26.637411000Z 03-Nov-2020 01:45:26.634 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
2020-11-03T01:45:26.637510000Z 03-Nov-2020 01:45:26.634 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdk.tls.ephemeralDHKeySize=2048
2020-11-03T01:45:26.637603000Z 03-Nov-2020 01:45:26.634 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources
2020-11-03T01:45:26.637691000Z 03-Nov-2020 01:45:26.634 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dorg.apache.catalina.security.SecurityListener.UMASK=0027
2020-11-03T01:45:26.637780000Z 03-Nov-2020 01:45:26.635 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dignore.endorsed.dirs=
2020-11-03T01:45:26.637897000Z 03-Nov-2020 01:45:26.635 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=/usr/local/tomcat
2020-11-03T01:45:26.638002000Z 03-Nov-2020 01:45:26.635 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=/usr/local/tomcat
2020-11-03T01:45:26.638094000Z 03-Nov-2020 01:45:26.635 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=/usr/local/tomcat/temp
2020-11-03T01:45:26.654483000Z 03-Nov-2020 01:45:26.652 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent Loaded Apache Tomcat Native library [1.2.25] using APR version [1.6.5].
......

查看全部容器

[root@izuf6h7blj36dmxbmcj15wz ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
f7d14d73ec4a        memcached           "docker-entrypoint..."   43 hours ago        Up 43 hours         0.0.0.0:11211->11211/tcp            memcache
86afbc58bd27        mysql:5.7.32        "docker-entrypoint..."   46 hours ago        Up 45 hours         0.0.0.0:3306->3306/tcp, 33060/tcp   mysql-test

docker操作命令:Docker 命令大全

3. 安装MySQL

① 查询远程MySQL镜像

[root@izuf6h7blj36dmxbmcj15wz ~]# docker search mysql
INDEX       NAME                                        DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
docker.io   docker.io/mysql                             MySQL is a widely used, open-source relati...   10111     [OK]       
docker.io   docker.io/mariadb                           MariaDB is a community-developed fork of M...   3711      [OK]       
docker.io   docker.io/mysql/mysql-server                Optimized MySQL Server Docker images. Crea...   739                  [OK]
docker.io   docker.io/percona                           Percona Server is a fork of the MySQL rela...   511       [OK]       
docker.io   docker.io/centos/mysql-57-centos7           MySQL 5.7 SQL database server                   84                   
docker.io   docker.io/mysql/mysql-cluster               Experimental MySQL Cluster Docker images. ...   77                   
docker.io   docker.io/centurylink/mysql                 Image containing mysql. Optimized to be li...   60                   [OK]
docker.io   docker.io/bitnami/mysql                     Bitnami MySQL Docker Image                      45                   [OK]
docker.io   docker.io/deitch/mysql-backup               REPLACED! Please use http://hub.docker.com...   41                   [OK]
docker.io   docker.io/tutum/mysql                       Base docker image to run a MySQL database ...   35                   
docker.io   docker.io/databack/mysql-backup             Back up mysql databases to... anywhere!         31                   
docker.io   docker.io/prom/mysqld-exporter                                                              31                   [OK]
docker.io   docker.io/schickling/mysql-backup-s3        Backup MySQL to S3 (supports periodic back...   29                   [OK]
docker.io   docker.io/linuxserver/mysql                 A Mysql container, brought to you by Linux...   26                   
docker.io   docker.io/centos/mysql-56-centos7           MySQL 5.6 SQL database server                   20                   
docker.io   docker.io/circleci/mysql                    MySQL is a widely used, open-source relati...   19                   
docker.io   docker.io/mysql/mysql-router                MySQL Router provides transparent routing ...   17                   
docker.io   docker.io/arey/mysql-client                 Run a MySQL client from a docker container      15                   [OK]
docker.io   docker.io/fradelg/mysql-cron-backup         MySQL/MariaDB database backup using cron t...   10                   [OK]
docker.io   docker.io/openshift/mysql-55-centos7        DEPRECATED: A Centos7 based MySQL v5.5 ima...   6                    
docker.io   docker.io/devilbox/mysql                    Retagged MySQL, MariaDB and PerconaDB offi...   3                    
docker.io   docker.io/ansibleplaybookbundle/mysql-apb   An APB which deploys RHSCL MySQL                2                    [OK]
docker.io   docker.io/jelastic/mysql                    An image of the MySQL database server main...   1                    
docker.io   docker.io/widdpim/mysql-client              Dockerized MySQL Client (5.7) including Cu...   1                    [OK]
docker.io   docker.io/monasca/mysql-init                A minimal decoupled init container for mysql    0 

② 拉取MySQL镜像

可以指定安装镜像的版本号,如果不指定的话默认拉取最新的版本

[root@izuf6h7blj36dmxbmcj15wz ~]# docker pull mysql
Using default tag: latest
Trying to pull repository docker.io/library/mysql ... 
latest: Pulling from docker.io/library/mysql
bb79b6b2107f: Already exists 
49e22f6fb9f7: Already exists 
842b1255668c: Already exists 
9f48d1f43000: Already exists 
c693f0615bce: Already exists 
8a621b9dbed2: Already exists 
0807d32aef13: Already exists 
a56aca0feb17: Pull complete 
de9d45fd0f07: Pull complete 
1d68a49161cc: Pull complete 
d16d318b774e: Pull complete 
49e112c55976: Pull complete 
Digest: sha256:8c17271df53ee3b843d6e16d46cff13f22c9c04d6982eb15a9a47bd5c9ac7e2d
Status: Downloaded newer image for docker.io/mysql:latest

查看已经获取的本地镜像仓库

[root@izuf6h7blj36dmxbmcj15wz ~]# docker images
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
docker.io/memcached   latest              804901da629f        2 days ago          82.3 MB
docker.io/mysql       5.7.32              1b12f2e9257b        7 days ago          448 MB
docker.io/mysql       latest              db2b37ec6181        7 days ago          545 MB

③ 创建并运行MySQL容器

[root@izuf6h7blj36dmxbmcj15wz ~]# docker run --name=mysql-test -it -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.32
[root@izuf6h7blj36dmxbmcj15wz ~]# 86afbc58bd27

--name:指定容器名称

-it:创建终端并以交互模式运行容器

-p:指定端口映射格式为 主机(宿主)端口:容器端口

-e:设置环境变量

-d:后台运行容器,并返回ID

④ 查看正在运行的容器

[root@izuf6h7blj36dmxbmcj15wz ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
f7d14d73ec4a        memcached           "docker-entrypoint..."   45 hours ago        Up 45 hours         0.0.0.0:11211->11211/tcp            memcache
86afbc58bd27        mysql:5.7.32        "docker-entrypoint..."   47 hours ago        Up 47 hours         0.0.0.0:3306->3306/tcp, 33060/tcp   mysql-test

⑤ 进入MySQL容器操作

[root@izuf6h7blj36dmxbmcj15wz ~]# docker exec -it mysql-test /bin/bash
root@86afbc58bd27:/# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 28
Server version: 5.7.32 MySQL Community Server (GPL)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

参考文献

若在云服务中操作,注意打开服务器3306端口

死磕三天总结出Docker小白入门操作指南(建议收藏)

在服务器中部署完成后使用navicat客户端连接

死磕三天总结出Docker小白入门操作指南(建议收藏)

使用Docker安装其他的镜像与安装MySQL操作基本相似,恭喜你学会了Docker操作

上一篇:操作系统实战45讲-3


下一篇:电商公司12亿用户数据被盗,窃取者被判有期徒刑三年,罚款 45 万