学术又官网的说法
Docker 是一个开源的利用容器引擎,让开发者能够打包他们的利用以及依赖包到一个可移植的容器中, 而后公布到任何风行的 Linux 机器或 Windows 机器上, 也能够实现虚拟化, 容器是齐全应用沙箱机制, 相互之间不会有任何接口。
没用过的人能看懂这段话?
用过的人为什么要看这段话?
还是要本人入手。
试用完感触
试用了一下,就是下载运行官网制作的 MySQL 镜像,没自建镜像仓库,没制作镜像,用完感觉性能像是 yum 外加微型 vmware。
docker 就是装置自带 ENV 软件包的 yum
右边的 MySQL 启动后,和服务器环境相互作用,像把一个新生儿放在了混合病房。
左边的 MySQL 启动后,自带一套环境变量,和服务器环境互不影响,像把一个新生儿放进了保温箱,保温箱有本人的温度湿度氧气,保温箱再放进病房里。
像 yum
咱们想装置某个软件,间接 yum install 软件,如果 yum 源服务器有安装包,主动就装置上了,而后启动软件开始工作。
docker 形式相似的,咱们想应用某个软件并且要求它以 docker 形式运行,那么先要 docker search 命令看 docker 仓库(官网仓库有大量软件镜像能够间接应用)是否有该软件的镜像,
有的话先将镜像 pull 到本地,而后 run 镜像,软件就开始工作了。这些镜像具备 Build once,Run anyWhere 的劣势,和 java 机制很像。run 起来的镜像被称作容器 container,查看镜像用 docker images 命令,查看容器用 docker ps 命令。
像 vmware
微型 vmware 是指,docker 启动某个软件的镜像后,就相当于启动的这个软件,不同的是这个软件好像运行在一个和操作系统隔离的环境中,这个环境有本人的环境变量,并且它的环境变量不影响操作系统,只对本镜像内的软件无效,就如同每个软件都运行在各自的 vmware 虚拟机中,虚拟机之间互不影响。例如同一操作系统中有 docker MySQL(docker 启动的 MySQL 镜像)和 docker nginx 两个过程在工作,两个过程齐全互不干涉,MySQL 运行在给它配置好的环境里,nginx 运行在给它配置好的环境里,一个的死活和变动和另一个无关,也和操作系统无关。
说容易,我做一遍试试
装置 Docker
下载 libcgroup
搜寻“libcgroup rpm”。RedHat 零碎就抉择 centos 的安装包,下载
libcgroup-0.41-21.el7.x86_64.rpm。ftp 上传到 Redhat 服务器。
装置 libcgroup
[root@bogon dockerab]# rpm -ivh libcgroup-0.41-21.el7.x86_64.rpm
Preparing... ################################# [100%]
Updating / installing...
1:libcgroup-0.41-21.el7 ################################# [100%]
下载 docker 包
[root@basicserver dockertest]# wget https://get.docker.com/rpm/1.7.1/centos-6/RPMS/x86_64/docker-engine-1.7.1-1.el6.x86_64.rpm
--2020-06-17 08:34:52-- https://get.docker.com/rpm/1.7.1/centos-6/RPMS/x86_64/docker-engine-1.7.1-1.el6.x86_64.rpm
Resolving get.docker.com... 99.86.193.96, 99.86.193.12, 99.86.193.128, ...
Connecting to get.docker.com|99.86.193.96|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 4762280 (4.5M) [binary/octet-stream]
Saving to: docker-engine-1.7.1-1.el6.x86_64.rpm
16% [============>] 801,777 35.5K/s eta 1m 49s
装置 docker
[root@basicserver dockertest]# rpm -ivh docker-engine-1.7.1-1.el6.x86_64.rpm
Preparing... ########################################### [100%]
1:docker-engine ########################################### [100%]
启动 docker 服务
[root@basicserver dockertest]# service docker start
Starting cgconfig service: [OK]
Starting docker: [OK]
起个 MySQL
Docker 启动了,相当于有了 yum 命令而已。yum 当然要用来装置各种软件啦。
查看仓库是否有 MySQL
相似 yum search 命令,
[root@basicserver dockertest]# docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relati... 9634 [OK]
mariadb MariaDB is a community-developed fork of M... 3500 [OK]
下载 MySQL 镜像到本地
[root@basicserver dockertest]# docker pull mysql
latest: Pulling from mysql
8011c293a399: Downloading [>] 277.6 kB/27.1 MB
2455a1403f59: Download complete
2f535805fb57: Download complete
ebf295599c35: Downloading [=========>] 768.5 kB/4.178 MB
如果网络不好,须要等待时间较长,并且报错退出的话要重复执行 docker pull mysql,直至下载胜利。胜利后会打印上面语句。
Digest: sha256:0648b8559643d01be3bfb0210ead5fdcb9a99ff7a6a1d5cb881bbd1f7f7b11bc
Status: Downloaded newer image for mysql:latest
查看镜像
[root@basicserver dockertest]# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
mysql latest 9cd0a11a66df 7 days ago 540.6 MB
看到 MySQL 镜像下载胜利。
启动 MySQL 镜像
启动命令各个参数含意略。
[root@bogon ~]# docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
54fc423d7b42db8151e8fe916e33e6e0b0f5fd62fc4a455950f26d6a956a97e3
查看容器
了解成 ps -ef | grep mysqld 吧
[root@bogon ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
54fc423d7b42 mysql "docker-entrypoint.s 8 seconds ago Up 6 seconds 33060/tcp, 0.0.0.0:3306->3306/tcp backstabbing_ptolemy
执行 sql
redhat 没装置连 MySQL 的工具,没法测试。如果有,不必进入容器,在 redhat 环境就能够拜访数据库。
当初只能容器内试试了。docker exec 进入容器,须要用到下面的 CONTAINER ID,进入后能够查看容器的文件系统和环境变量。
[root@bogon ~]# docker exec -it 54fc423d7b42 bash
胜利进入 MySQL 容器,连贯数据库试试
root@54fc423d7b42:/# mysql -uroot -p123456
mysql: [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 8
Server version: 8.0.20 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> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
mysql>
到此就能应用 MySQL 了。如果间接装置 MySQL 遇到的问题可能很多,最顺利的状况也就和方才一样吧!并且每台服务器都要解决不一样的问题,当初就能初步感触到 docker 的不便之处了。
容器内外环境比照
看看容器内环境变量,变量很少
root@54fc423d7b42:/# env
MYSQL_MAJOR=8.0
HOSTNAME=54fc423d7b42
PWD=/
MYSQL_ROOT_PASSWORD=123456
HOME=/root
MYSQL_VERSION=8.0.20-1debian10
GOSU_VERSION=1.12
SHLVL=1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
_=/usr/bin/env
看文件系统就 ls cd 就能够了
退出容器,回到操作系统,查看环境变量
root@54fc423d7b42:/# exit
exit
[root@bogon ~]# env #操作系统的环境变量
XDG_SESSION_ID=1
HOSTNAME=bogon
SELINUX_ROLE_REQUESTED=
TERM=vt100
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=192.168.56.1 49661 22
SELINUX_USE_CURRENT_RANGE=
SSH_TTY=/dev/pts/0
USER=root
LS_COLORS=rs=0:di=01;34:....
SSH_AUTH_SOCK=/tmp/ssh-gSRfCMVd4x/agent.3732
MAIL=/var/spool/mail/root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
PWD=/root
LANG=en_US.UTF-8
SELINUX_LEVEL_REQUESTED=
HISTCONTROL=ignoredups
SHLVL=1
HOME=/root
LOGNAME=root
SSH_CONNECTION=192.168.56.1 49661 192.168.56.106 22
LESSOPEN=||/usr/bin/lesspipe.sh %s
XDG_RUNTIME_DIR=/run/user/0
_=/usr/bin/env
齐全是两个世界,主环境没有一点装置过 MySQL 的痕迹,而这个服务器却实实在在的有 MySQL 的性能。
一些坑
- 遇到报错
Cannot connect to the Docker daemon. Is 'docker -d' running on this host?
,重启 docker
[root@basicserver dockertest]# service docker stop 间接 restart 也可
[root@basicserver dockertest]# service docker start
- radhat7 须要先装置 libcgroup,而后装置 docker 的 rpm 包能力胜利。
- redhat6 无奈运行本文版本的 docker,当 docker run 时报错。所以如果装置本文版本的 docker,Redhat 版本要 7 以及更高。
[root@basicserver dockertest]# docker run mysql #Redhat6 run 不起来
FATAL: kernel too old
总结
谁再说不会用 docker,非要一步一步配环境,装软件,就问他,“你会用 yum 吗?”
话说回来,刚开始用总感觉不虚浮,和零碎隔了一层,不如间接装置的货色手感好。