一、docker:基于容器的虚拟化(将应用托管到应用容器上),实现了一种应用程序级别的资源隔离及配额。

什么是容器?
容器:轻量级的虚拟化(共享同一系统内核),容器是由容器镜像来运行
优点:容器密度高,启动快,没有太多额外的开销;缺点:只能在linux操作系统
虚拟化和容器的区别?
不同点:两者都讲究的是隔离,虚拟化是物理机上安装虚拟机然后安装多种操作系统(常用的vmwore、openstack、kvm都是使用的虚拟化技术);容器是直接将容器层安装在linux操作系统之上实现各种板块隔离

1.docker安装

方法一:使用官方安装脚本自动安装
实际上就是下载一个安装脚本,再执行安装(不推荐,因为不能选择版本安装)
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
方法二:使用yum进行安装,不推荐
yum install docker
这样直接从光盘或yum仓库里安装,版本较低
方法三:使用yum添加源进行安装指定版本,推荐
(1)添加docker-ce 源信息

yum-config-manager --add-repo=https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

(2)更新yum源:是把软件包信息提前把本地缓存一份,为了提高安装搜索软件的速度

yum makecache fast

(3)安装docker-ce

yum -y install docker-ce  #默认下载的是最新版本

① 查看都有哪些docker版本
yum list docker-ce.x86_64 --showduplicates | sort -r
② 下载指定版本,这里下载的稳定版本
yum -y install docker-ce-17.03.2.ce

测试:docker version / docker -v

[root@manager yum.repos.d]# docker version
Client: Docker Engine - Community
 Version:           19.03.12
 API version:       1.40
 Go version:        go1.13.10
 Git commit:        48a66213fe
 Built:             Mon Jun 22 15:46:54 2020
 OS/Arch:           linux/amd64
 Experimental:      false
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? 
 #说明docker服务没有开启
 [root@manager yum.repos.d]# docker -v
Docker version 1.13.1, build 64e9980/1.13.1s

2.开启服务:systemctl enable --now docker

注1:安装过程中可能出现的问题:
原因是可能之前已经安装过旧版本的docker,在安装的时候报错如下
Transaction check error: file /usr/bin/docker from install of docker-ce-cli-1:19.03.12-3.el7.x86_64 conflicts with file from package docker-common-2:1.13.1-161.git64e9980.el7_8.x86_64 file /usr/bin/dockerd from install of docker-ce-3:19.03.12-3.el7.x86_64 conflicts with file from package docker-common-2:1.13.1-161.git64e9980.el7_8.x86_64
解决:卸载旧版本的包
yum remove docker-common-2:1.13.1-161.git64e9980.el7_8.x86_64
再次安装docker就会成功安装!

注2::[root@manager ~]# docker --help 帮助命令

二、docker三大核心:镜像、容器、仓库

镜像:类似虚拟机镜像
容器:类似linux系统环境,运行和隔离应用。容器从镜像启动的时候,docker会在镜像的最上一层创建一个可写层,镜像本身是只读的,保持不变
仓库:每个仓库存放某一类镜像。分为两类:docker hub共有仓库、docker-registry私有仓库。(图形化构建docker仓库)

在这里插入图片描述

三、docker操作

1.仓库相关命令

docker search 镜像名从仓库搜索镜像
docker pull 镜像名从仓库拉出镜像,默认拉取的最新版
docker push 镜像名向仓库推进镜像 【hub.docker.com必须在网页上注册一个账号(docker hub注册账号),然后在命令行使用docker login登录,进行镜像打标签,才能把镜像推到仓库】

怎么把镜像push进仓库?
step1——找到本地镜像的ID:docker images ls
step2——登陆Hub:docker login --username=username --password=password --email=email
step3——镜像打标签tag:docker tag <imageID> <namespace>/<image name>:<version tag eg latest>
step4——push镜像:docker push <namespace>/<image name>
eg1.从仓库搜索镜像centos

[root@manager ~]# docker search centos  
NAME                               DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
centos                             The official build of CentOS.                   6061                [OK]                
ansible/centos7-ansible            Ansible on Centos7                              130                                     [OK]
consol/centos-xfce-vnc             Centos container with "headless" VNC session…   116                                     [OK]
jdeathe/centos-ssh                 OpenSSH / Supervisor / EPEL/IUS/SCL Repos -114 
...................

eg2: 从仓库拉取镜像busybox

[root@manager ~]# docker pull busybox 
Using default tag: latest
latest: Pulling from library/busybox
76df9210b28c: Pull complete 
Digest: sha256:95cf004f559831017cdf4628aaf1bb30133677be8702a8c5f2994629f637a209
Status: Downloaded newer image for busybox:latest
docker.io/library/busybox:latest

eg3:向仓库推进镜像
hub.docker.com必须在网页上注册一个账号(docker hub注册账号),才能把镜像推到仓库

docker push 镜像名
docker login

2.镜像相关命令

docker search 镜像名搜索镜像
docker pull 镜像名拉出镜像,默认拉取的最新版
docker image save 镜像名 > name.tar.gz导出镜像
docker image rm 镜像名 <=>docker rmi 镜像名删除镜像(若要删除正在运行的镜像加-f)
docker image load -i 文件名导入镜像
docker image ls查看当前镜像列表
docker image inspect 镜像名查看镜像详细信息
docker image tag 镜像名:latest 仓库名:tag名给镜像打标记,一般用在把镜像push仓库

eg1:查看当前镜像列表,查看镜像详细信息,查看busybox镜像历史记录

[root@manager ~]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
busybox             latest              1c35c4412082        3 weeks ago         1.22MB
[root@manager ~]# docker image inspect busybox 
[root@manager ~]# docker image history busybox
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
1c35c4412082        3 weeks ago         /bin/sh -c #(nop)  CMD ["sh"]                   0B                  
<missing>           3 weeks ago         /bin/sh -c #(nop) ADD file:a84c53d2fe5207d17…   1.22MB 

eg2:导出镜像:
方法1:docker image save 镜像名 > 路径位置信息(name.tar.gz)

[root@manager ~]# docker image save busybox > busybox1.tar.gz

方法2:docker image save -o 路径位置信息(name.tar.gz) 镜像名:latest

[root@manager ~]# docker image save -o busybox2.tar.gz busybox:latest

eg3:删除镜像:docker image rm 镜像名

[root@manager ~]# docker image rm busybox
Untagged: busybox:latest
Untagged: busybox@sha256:95cf004f559831017cdf4628aaf1bb30133677be8702a8c5f2994629f637a209
Deleted: sha256:1c35c441208254cb7c3844ba95a96485388cef9ccc0646d562c7fc026e04c807
Deleted: sha256:1be74353c3d0fd55fb5638a52953e6f1bc441e5b1710921db9ec2aa202725569
[root@manager ~]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              7                   b5b4d78bc90c        7 weeks ago         203MB

eg4:导入镜像:docker image load -i 路径位置信息

[root@manager ~]# docker image load -i busybox1.tar.gz
1be74353c3d0: Loading layer  1.437MB/1.437MB
Loaded image: busybox:latest
[root@manager ~]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
busybox             latest              1c35c4412082        3 weeks ago         1.22MB
centos              7                   b5b4d78bc90c        7 weeks ago         203MB

或者

[root@manager ~]# docker image import busybox1.tar.gz busybox:v1
sha256:70fe82f93ddc2f501380d3749e743be3e9afd3d9dfc106ae2e22c92d830f91df
[root@manager ~]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
busybox             v1                  70fe82f93ddc        6 seconds ago       1.44MB
centos              7                   b5b4d78bc90c        7 weeks ago         203MB

eg5:给镜像打标记:tag 一般用在把镜像push进仓库
docker image tag 镜像名:latest 仓库名:tag名

[root@manager ~]# docker image tag busybox:latest busybox:v1.1
[root@manager ~]# docker image tag busybox:latest busybox:v1.2
[root@manager ~]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
busybox             latest              1c35c4412082        3 weeks ago         1.22MB
busybox             v1.1                1c35c4412082        3 weeks ago         1.22MB
busybox             v1.2                1c35c4412082        3 weeks ago         1.22MB
centos              7                   b5b4d78bc90c        7 weeks ago         203MB
[root@manager ~]# docker image rm busybox:v1.1 busybox:v1.2
Untagged: busybox:v1.1
Untagged: busybox:v1.2
[root@manager ~]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
busybox             latest              1c35c4412082        3 weeks ago         1.22MB
centos              7                   b5b4d78bc90c        7 weeks ago         203MB

docker镜像帮助命令

[root@manager ~]# docker image --help

Usage:	docker image COMMAND

Manage images

Commands:
  build       Build an image from a Dockerfile
  history     Show the history of an image
  import      Import the contents from a tarball to create a filesystem image
  inspect     Display detailed information on one or more images
  load        Load an image from a tar archive or STDIN
  ls          List images
  prune       Remove unused images
  pull        Pull an image or a repository from a registry
  push        Push an image or a repository to a registry
  rm          Remove one or more images
  save        Save one or more images to a tar archive (streamed to STDOUT by default)
  tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE

Run 'docker image COMMAND --help' for more information on a command.

3.容器相关命令:

docker run 镜像名 [-i/-d/-t/–name]启动容器
docker stop 容器名字/容器ID停止容器
docker kill 容器名字/容器ID杀死运行中的容器
docker rm 容器名/容器ID删除容器(加-f 表示删除运行中的)
docker start 容器名字/容器ID激活关闭中的容器
docker ps查看正在运行的容器的信息(状态)
docker ps -a查看所有容器的信息(状态)
docker ps -q查看正在运行的容器的ID号
docker ps -aq查看所有容器的ID号
docker inspect 容器名字/容器ID查看某个容器的详细信息
docker exec -it 容器名 指定的shell进入容器
docker logs 容器名字/容器ID查询容器内部日志
退出容器:1.要是直接输入exit退出的话,容器的状态就变为Exited,而不是up 2.要时Ctrl+p Ctrl+q退出的话,容器的状态还是up
docker commit 参数 仓库名 镜像名:tag容器内的操作配置提交成一个镜像
创建Dockerfile文件去构建镜像

eg1:启动容器
方法1(不推荐):
先创建一个容器:docker create 镜像名
再启动容器:docker start 容器名

[root@manager ~]# docker create busybox:latest 
47f2de8f995999651498e6f0b58764214817e182ad8eff32b2b0b231f5fd3628
[root@manager ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
47f2de8f9959        busybox:latest      "sh"                16 seconds ago      Created                                 recursing_galileo
[root@manager ~]# docker start recursing_galileo
recursing_galileo
[root@manager ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@manager ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
47f2de8f9959        busybox:latest      "sh"                58 seconds ago      Exited (0) 9 seconds ago                       recursing_galileo

方法2:docker run 镜像名 [-d/-i/-t/–name],这种启动的话进去又退出的话状态就变成Exited状态

[root@manager ~]# docker run -it busybox:latest 
/ # ls
bin   dev   etc   home  proc  root  sys   tmp   usr   var
/ # exit
[root@manager ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@manager ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
1fcc320d6f11        busybox:latest      "sh"                23 seconds ago      Exited (0) 10 seconds ago                       gracious_hopper
47f2de8f9959        busybox:latest      "sh"                3 minutes ago       Exited (0) 2 minutes ago                        recursing_galileo

而docker run 镜像名 [-d/-i/-t/–name],进去按CTRL+p ,CTRL+q的话,状态是UP

[root@manager ~]# docker run -it busybox:latest 
/ # [root@manager ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
328a8dbff50f        busybox:latest      "sh"                9 seconds ago       Up 8 seconds                            vigorous_easley

或者用后台(-d)执行的方式,使状态成为UP【推荐】

[root@manager ~]# docker run -idt --name c1 busybox:latest 
baafbd0b1a3dfe19692929cac68e29096652c277140ccdc48f2ec8bd331631ac
[root@manager ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
baafbd0b1a3d        busybox:latest      "sh"                10 seconds ago      Up 9 seconds                            c1

eg2:停止运行的容器:

[root@manager ~]# docker stop vigorous_easley
vigorous_easley
[root@manager ~]# docker stop baafbd0b1a3d
baafbd0b1a3d
[root@manager ~]# docker ps 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

eg3: 杀死运行的容器

[root@manager ~]# docker kill competent_robinson
competent_robinson

eg4:激活关闭的容器:

[root@manager ~]# docker start competent_robinson
competent_robinson

eg5:查看容器的详细信息:

[root@manager ~]# docker inspect 9f91c7213a7d
[
    {
        "Id": "9f91c7213a7dda367f8fe152403eb2b6612c2849bb9a06299e360378db3c9f8e",
        "Created": "2020-06-25T09:34:09.421984223Z",
        "Path": "/bin/sh",
        "Args": [],
        "State": {
            "Status": "exited",
            "Running": false,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 0,
            "ExitCode": 0,

查看正在运行的容器的ID号

[root@manager ~]# docker ps -q 
f658dc1f9c9f

查看所有的容器的ID号

[root@manager ~]# docker ps -aq 
f658dc1f9c9f
328a8dbff50f
baafbd0b1a3d
1fcc320d6f11
47f2de8f9959

eg6:删除容器:docker rm 容器名或容器ID
删除所有的容器:查询所有容器 IDdocker ps -aq,加-f表示删除运行中的

[root@manager ~]# docker rm -f `docker ps -aq`
f658dc1f9c9f
328a8dbff50f
baafbd0b1a3d
1fcc320d6f11
47f2de8f9959
[root@manager ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

eg7:进入容器:

[root@manager ~]# docker exec -it centos7 /bin/bash
[root@73e57bae16bf /]# cat /etc/redhat-release 
CentOS Linux release 7.8.2003 (Core)
[root@dc58900031a2 /]# ip a   #有的命令是没有的
bash: ip: command not found
[root@dc58900031a2 /]# ping www.baidu.com
PING www.a.shifen.com (14.215.177.38) 56(84) bytes of data.
64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=1 ttl=127 time=132 ms
^C
--- www.a.shifen.com ping statistics ---
2 packets transmitted, 1 received, 50% packet loss, time 1004ms
rtt min/avg/max/mdev = 132.518/132.518/132.518/0.000 ms
[root@73e57bae16bf /]# exit  要是直接输入exit退出的话,容器的状态就变为Exited,而不是up

退出容器:1.要是直接输入exit退出的话,容器的状态就变为Exited,而不是up 2.要时Ctrl+p Ctrl+q退出的话,容器的状态还是up

eg8.查询容器内部日志:docker logs 容器名

镜像的制作方式:

eg9:在容器里做的配置或者操作可以将它提交成一个镜像:
1.docker commit 参数 仓库名 镜像名:tag

[root@manager ~]# docker commit --help
Usage:	docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
Create a new image from a container's changes
Options:
  -a, --author string    Author (e.g., "John Hannibal Smith
                         <hannibal@a-team.com>")
  -c, --change list      Apply Dockerfile instruction to the created
                         image
  -m, --message string   Commit message
  -p, --pause            Pause container during commit (default true)
[root@manager ~]# docker commit -a "pyy <1459847670@qq.com>" -m "install htt" centos7 pyy/centos7-httpd:v1.1
sha256:b0aaa32df421d7d4864e635ab7679ce283b5eff342e3daf3a3747a0268793e90
[root@manager ~]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED           SIZE
pyy/centos7-httpd   v1.1                b0aaa32df421        14 seconds ago    203MB
busybox             v1                  70fe82f93ddc        4 days ago        1.44MB
mattrayner/lamp     latest              b29dc990e66c        2 weeks ago       898MB
mysql               5.6                 8de95e6026c3        2 weeks ago       302MB
busybox             latest              1c35c4412082        3 weeks ago       1.22MB
centos              7                   b5b4d78bc90c        7 weeks ago  

2.使用Dockerfile构建镜像
1.创建目录,在此目录创建一个Dockerfile文件,并进行命令编写

[root@manager ~]# mkdir centos7
[root@manager ~]# cd centos7/
[root@manager centos7]# ls
[root@manager centos7]# vim Dockerfile   #文件名字必须这样写
[root@manager centos7]# cat Dockerfile 
FROM centos:7
MAINTAINER pyy <1459847670@qq.com

#install wget
RUN yum install -y wget

#download sl[蒸汽火车]
RUN wget http://rpmfind.net/linux/epel/7/x86_64/Packages/s/sl-5.02-1.el7.x86_64.rpm -P /opt/

#install sl
RUN yum install -y /opt/sl-5.02-1.el7.x86_64.rpm

2.开始构建镜像:docker build -t 镜像名 路径

[root@manager centos7]# docker build -t centos-sl .
Sending build context to Docker daemon  2.048kB
Step 1/5 : FROM centos:7
 ---> b5b4d78bc90c
Step 2/5 : MAINTAINER pyy <1459847670@qq.com
 ---> Running in cf8d9e31daeb
Removing intermediate container cf8d9e31daeb
 ---> affaf920c949
Step 3/5 : RUN yum install -y wget
 ---> Running in 68119504ded2
Loaded plugins: fastestmirror, ovl
Determining fastest mirrors
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
Resolving Dependencies
--> Running transaction check
---> Package wget.x86_64 0:1.14-18.el7_6.1 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package        Arch             Version                   Repository      Size
================================================================================
Installing:
 wget           x86_64           1.14-18.el7_6.1           base           547 k

Transaction Summary
================================================================================
Install  1 Package

Total download size: 547 k
Installed size: 2.0 M
Downloading packages:
warning: /var/cache/yum/x86_64/7/base/packages/wget-1.14-18.el7_6.1.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Public key for wget-1.14-18.el7_6.1.x86_64.rpm is not installed
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Importing GPG key 0xF4A80EB5:
 Userid     : "CentOS-7 Key (CentOS 7 Official Signing Key) <security@centos.org>"
 Fingerprint: 6341 ab27 53d7 8a78 a7c2 7bb1 24c6 a8a7 f4a8 0eb5
 Package    : centos-release-7-8.2003.0.el7.centos.x86_64 (@CentOS)
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : wget-1.14-18.el7_6.1.x86_64                                  1/1 
install-info: No such file or directory for /usr/share/info/wget.info.gz
  Verifying  : wget-1.14-18.el7_6.1.x86_64                                  1/1 

Installed:
  wget.x86_64 0:1.14-18.el7_6.1                                                 

Complete!
Removing intermediate container 68119504ded2
 ---> 8c2c03c0cd2c
Step 4/5 : RUN wget http://rpmfind.net/linux/epel/7/x86_64/Packages/s/sl-5.02-1.el7.x86_64.rpm -P /opt/
 ---> Running in d7a9e1c8cf52
--2020-06-29 10:14:15--  http://rpmfind.net/linux/epel/7/x86_64/Packages/s/sl-5.02-1.el7.x86_64.rpm
Resolving rpmfind.net (rpmfind.net)... 195.220.108.108
Connecting to rpmfind.net (rpmfind.net)|195.220.108.108|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 14244 (14K) [application/x-rpm]
Saving to: '/opt/sl-5.02-1.el7.x86_64.rpm'

     0K .......... ...                                        100% 5.68K=2.5s

2020-06-29 10:14:20 (5.68 KB/s) - '/opt/sl-5.02-1.el7.x86_64.rpm' saved [14244/14244]

Removing intermediate container d7a9e1c8cf52
 ---> 5e327a21901f
Step 5/5 : RUN yum install -y /opt/sl-5.02-1.el7.x86_64.rpm
 ---> Running in cb52718c4d83
Loaded plugins: fastestmirror, ovl
Examining /opt/sl-5.02-1.el7.x86_64.rpm: sl-5.02-1.el7.x86_64
Marking /opt/sl-5.02-1.el7.x86_64.rpm to be installed
Resolving Dependencies
--> Running transaction check
---> Package sl.x86_64 0:5.02-1.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package   Arch          Version             Repository                    Size
================================================================================
Installing:
 sl        x86_64        5.02-1.el7          /sl-5.02-1.el7.x86_64         17 k

Transaction Summary
================================================================================
Install  1 Package

Total size: 17 k
Installed size: 17 k
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : sl-5.02-1.el7.x86_64                                         1/1 
  Verifying  : sl-5.02-1.el7.x86_64                                         1/1 

Installed:
  sl.x86_64 0:5.02-1.el7                                                        

Complete!
Removing intermediate container cb52718c4d83
 ---> 8afabae50ed0
Successfully built 8afabae50ed0
Successfully tagged centos-sl:latest
#测试
[root@manager centos7]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos-sl           latest              8afabae50ed0        7 seconds ago       309MB
pyy/centos7-httpd   v1.1                b0aaa32df421        23 minutes ago      203MB
busybox             v1                  70fe82f93ddc        4 days ago          1.44MB
mattrayner/lamp     latest              b29dc990e66c        2 weeks ago         898MB
mysql               5.6                 8de95e6026c3        2 weeks ago         302MB
busybox             latest              1c35c4412082        3 weeks ago         1.22MB
centos              7                   b5b4d78bc90c        7 weeks ago         203MB
#启动镜像
[root@manager centos7]# docker run -it centos-sl /bin/bash  
[root@1bb4779b1cf1 /]# sl

在这里插入图片描述

四、外部访问docker容器:docker run -p(-p表示端口映射);也就是将应用托管到应用容器上

1.从仓库拉出Mysql镜像

[root@manager ~]# docker pull mysql:5.6
5.6: Pulling from library/mysql
7d2977b12acb: Pull complete 
5fb8400e7f07: Pull complete 
234877fbb165: Pull complete 
6fe1021f12f3: Pull complete 
7e36fe6b53f0: Pull complete 
996ec709c11b: Pull complete 
5198b7523387: Pull complete 
cc9bdad4dcc0: Pull complete 
380cd37ad979: Downloading  6.446MB/64.2MB
d64465acf034: Download complete 
d4ee6606b3ab: Download complete 
380cd37ad979: Downloading  18.26MB/64.2MB
380cd37ad979: Downloading  29.01MB/64.2MB
380cd37ad979: Pull complete 
d64465acf034: Pull complete 
d4ee6606b3ab: Pull complete 
Digest: sha256:2bf1a0a05a6ad437dcac6689e48a9c33774ac92c6213fce2c4196343210592f3
Status: Downloaded newer image for mysql:5.6
docker.io/library/mysql:5.6

2.启动容器mysql(并设置root密码),并且设置外部端口映射

[root@manager ~]# docker run --name mysql -itd -p 3305:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6 
97be89fd63737771d36882d512f86cf484c5518de9a56848d68ca8ed31edc42c

3.外部安装mysql5.6,并且查看端口3305是否监听
yum whatprovides mysql
yum install mariadb -y

[root@manager ~]# netstat -ltunp | grep 3305
tcp6       0      0 :::3305                 :::*                    LISTEN      6379/docker-proxy  

4.从外部访问mysql容器
方法一:docker exec -it mysql mysql -uroot -p123456

[root@manager ~]# docker exec -it mysql mysql -uroot -p123456
Warning: Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.48 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> select version();
+-----------+
| version() |
+-----------+
| 5.6.48    |
+-----------+
1 row in set (0.00 sec)

mysql> exit
Bye

方法2:mysql -uroot -p -h172.17.0.2

[root@manager ~]# mysql -uroot -p -h172.17.0.2
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.6.48 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

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

MySQL [(none)]> exit
Bye

注:外部是直接不能进入mysql的,因为没有权限

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐