Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。
通过 uname -r 命令查看你当前的内核版本
[root@slave1 ~]# uname -r
3.10.0-957.el7.x86_64
[root@slave1 ~]#
安装一些必要的系统工具:
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
[root@slave1 ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
已加载插件:fastestmirror, langpacks
adding repo from: http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
grabbing file http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
repo saved to /etc/yum.repos.d/docker-ce.repo
从 2017 年 3 月开始 docker 在原来的基础上分为两个分支版本: Docker CE 和 Docker EE。
Docker CE 即社区免费版,Docker EE 即企业版,强调安全,但需付费使用。
下载CentOS
# docker pull centos #该命令会自动下载最新版本docker官方的centos,目前是7.5
# docker images
docker run --privileged=true -it --name=lvdayang centos /bin/bash
[root@slave1 local]# cp /usr/local/jdk1.8.zip bccc35e6e691:/opt/software
cp: 无法创建普通文件"bccc35e6e691:/opt/software": 没有那个文件或目录
[root@slave1 local]# docker cp /usr/local/jdk1.8.zip bccc35e6e691:/opt/software
[root@slave1 local]#
docker exec --help
docker exec -it bccc35e6e691 /bin/bash
可以看出获得了docker容器的id就可以进入容器了
然后我们使用docker ps查看到该容器信息,接下来就使用docker attach进入该容器docker attach 44fc0f0582d9可以看到我们已经进入到该容器中了。但在,使用该命令有一个问题。当多个窗口同时使用该命令进入该容器时,所有的窗口都会同步显示。如果有一个窗口阻塞了,那么其他窗口也无法再进行操作。
找不到以前的容器了怎么办????短暂方式,直接将一个已经终止的容器启动运行起来
可以使用docker start命令,直接将一个已经终止的容器启动运行起来。
[root@rocketmq-nameserver4 ~]# docker run my/python:v1 /bin/echo hello test
hello test
命令执行完,控制台会打印"hello test",container就终止了,不过并没有消失,
可以用"docker ps -n 5 "看一下最新前5个的container,第一个就是刚刚执行过的container,可以再次执行一遍:docker start container_id
使用docker stop $CONTAINER_ID来终止一个运行中的容器。并且可以使用docker ps -a来看终止状态的容器。
终止状态的容器,可以使用docker start来重新启动。
使用nsenter进入Docker容器
docker安装以后的网络类型
[root@insure updev]# docker network ls
6 Apr 11 2018 sbin
drwxr-xr-x 5 root root 49 Mar 5 17:34 share
drwxr-xr-x 2 root root 6 Apr 11 2018 src
[root@bccc35e6e691 local]# mv mysql-5.7.26-el7-x86_64 mysql
[root@bccc35e6e691 local]# ll
total 886348
drwxr-xr-x 2 root root 6 Apr 11 2018 bin
drwxr-xr-x 2 root root 6 Apr 11 2018 etc
drwxr-xr-x 2 root root 6 Apr 11 2018 games
drwxr-xr-x 2 root root 6 Apr 11 2018 include
drwxr-xr-x 8 root root 255 Jun 1 2018 jdk1.8
-rw-r--r-- 1 root root 193568083 Aug 5 03:23 jdk1.8.zip
drwxr-xr-x 2 root root 6 Apr 11 2018 lib
drwxr-xr-x 2 root root 6 Apr 11 2018 lib64
drwxr-xr-x 2 root root 6 Apr 11 2018 libexec
drwxr-xr-x 9 root root 129 Aug 5 09:29 mysql
-rw-r----- 1 root root 714050311 Jun 14 16:43 mysql-5.7.26-el7-x86_64.tar.gz
drwxr-xr-x 2 root root 6 Apr 11 2018 sbin
drwxr-xr-x 5 root root 49 Mar 5 17:34 share
drwxr-xr-x 2 root root 6 Apr 11 2018 src
[root@bccc35e6e691 local]# mkdir -p /data/mysql
[root@bccc35e6e691 local]# mkdir -p /data/log/mysql
[root@bccc35e6e691 local]# groupadd mysql
useradd -r -s /sbin/nologin -g mysql mysql -d /usr/local/mysql/
[root@bccc35e6e691 local]# useradd -r -s /sbin/nologin -g mysql mysql -d /usr/local/mysql/
[root@bccc35e6e691 local]# cd /usr/local/mysql
[root@bccc35e6e691 mysql]# chown -R mysql .
chgrp -R mysql .
[root@bccc35e6e691 mysql]# chgrp -R mysql .
chown -R mysql:mysql /data/mysql/
[root@bccc35e6e691 mysql]# chown -R mysql:mysql /data/mysql/
[root@bccc35e6e691 mysql]# chown -R mysql:mysql /data/log/
[root@bccc35e6e691 mysql]# ./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql
./bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
[root@bccc35e6e691 mysql]# ll
total 36
-rw-r--r-- 1 mysql mysql 17987 Apr 13 13:32 COPYING
-rw-r--r-- 1 mysql mysql 2478 Apr 13 13:32 README
drwxr-xr-x 2 mysql mysql 4096 Aug 5 09:29 bin
drwxr-xr-x 2 mysql mysql 55 Aug 5 09:29 docs
drwxr-xr-x 3 mysql mysql 4096 Aug 5 09:29 include
drwxr-xr-x 5 mysql mysql 230 Aug 5 09:29 lib
drwxr-xr-x 4 mysql mysql 30 Aug 5 09:29 man
drwxr-xr-x 28 mysql mysql 4096 Aug 5 09:29 share
drwxr-xr-x 2 mysql mysql 90 Aug 5 09:29 support-files
[root@bccc35e6e691 mysql]# yum install libaio*
Loaded plugins: fastestmirror, ovl
Loading mirror speeds from cached hostfile
* base: mirror.lzu.edu.cn
* extras: mirror.lzu.edu.cn
* updates: mirror.lzu.edu.cn
base | 3.6 kB 00:00:00
extras | 3.4 kB 00:00:00
updates | 3.4 kB 00:00:00
Resolving Dependencies
--> Running transaction check
---> Package libaio.x86_64 0:0.3.109-13.el7 will be installed
---> Package libaio-devel.x86_64 0:0.3.109-13.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
===================================================================================================================================================================================================
Package Arch Version Repository Size
===================================================================================================================================================================================================
Installing:
libaio x86_64 0.3.109-13.el7 base 24 k
libaio-devel x86_64 0.3.109-13.el7 base 13 k
Transaction Summary
===================================================================================================================================================================================================
Install 2 Packages
Total download size: 37 k
Installed size: 46 k
Is this ok [y/d/N]: y
Downloading packages:
(1/2): libaio-devel-0.3.109-13.el7.x86_64.rpm | 13 kB 00:00:00
(2/2): libaio-0.3.109-13.el7.x86_64.rpm | 24 kB 00:00:00
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total 140 kB/s | 37 kB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : libaio-0.3.109-13.el7.x86_64 1/2
Installing : libaio-devel-0.3.109-13.el7.x86_64 2/2
Verifying : libaio-0.3.109-13.el7.x86_64 1/2
Verifying : libaio-devel-0.3.109-13.el7.x86_64 2/2
Installed:
libaio.x86_64 0:0.3.109-13.el7 libaio-devel.x86_64 0:0.3.109-13.el7
Complete!
[root@bccc35e6e691 mysql]# ./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql
./bin/mysqld: error while loading shared libraries: libnuma.so.1: cannot open shared object file: No such file or directory
[root@bccc35e6e691 mysql]# yum install -y libnuma
Loaded plugins: fastestmirror, ovl
Loading mirror speeds from cached hostfile
* base: mirror.lzu.edu.cn
* extras: mirror.lzu.edu.cn
* updates: mirror.lzu.edu.cn
No package libnuma available.
Error: Nothing to do
[root@bccc35e6e691 mysql]# yum install -y libnum*
Loaded plugins: fastestmirror, ovl
Loading mirror speeds from cached hostfile
* base: mirror.lzu.edu.cn
* extras: mirror.lzu.edu.cn
* updates: mirror.lzu.edu.cn
Resolving Dependencies
--> Running transaction check
---> Package numactl-libs.x86_64 0:2.0.9-7.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
===================================================================================================================================================================================================
Package Arch Version Repository Size
===================================================================================================================================================================================================
Installing:
numactl-libs x86_64 2.0.9-7.el7 base 29 k
Transaction Summary
===================================================================================================================================================================================================
Install 1 Package
Total download size: 29 k
Installed size: 50 k
Downloading packages:
numactl-libs-2.0.9-7.el7.x86_64.rpm | 29 kB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : numactl-libs-2.0.9-7.el7.x86_64 1/1
Verifying : numactl-libs-2.0.9-7.el7.x86_64 1/1
Installed:
numactl-libs.x86_64 0:2.0.9-7.el7
Complete!
[root@bccc35e6e691 mysql]# ./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql
2019-08-05T09:41:46.395248Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2019-08-05T09:41:53.808011Z 0 [Warning] InnoDB: New log files created, LSN=45790
2019-08-05T09:41:54.783660Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2019-08-05T09:41:54.972448Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 42acfe17-b765-11e9-977c-0242ac110002.
2019-08-05T09:41:55.002967Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2019-08-05T09:41:55.004133Z 1 [Note] A temporary password is generated for root@localhost: EJ,?*i4BVTy*
[root@bccc35e6e691 mysql]#
[root@bccc35e6e691 mysql]#
[root@bccc35e6e691 mysql]#
[root@bccc35e6e691 mysql]#
[root@bccc35e6e691 mysql]# ./bin/mysql --user=root -p
mysql: Can't read dir of '/etc/my.cnf.d' (Errcode: 2 - No such file or directory)
mysql: [ERROR] Fatal error in defaults handling. Program aborted!
[root@bccc35e6e691 mysql]# /etc/init.d/mysqld start
bash: /etc/init.d/mysqld: No such file or directory
[root@bccc35e6e691 mysql]# /etc/init.d/mysql start
my_print_defaults: Can't read dir of '/etc/my.cnf.d' (Errcode: 2 - No such file or directory)
my_print_defaults: [ERROR] Fatal error in defaults handling. Program aborted!
Starting MySQL.my_print_defaults: Can't read dir of '/etc/my.cnf.d' (Errcode: 2 - No such file or directory)
my_print_defaults: [ERROR] Fatal error in defaults handling. Program aborted!
my_print_defaults: Can't read dir of '/etc/my.cnf.d' (Errcode: 2 - No such file or directory)
my_print_defaults: [ERROR] Fatal error in defaults handling. Program aborted!
Logging to '/data/mysql/bccc35e6e691.err'.
ERROR! The server quit without updating PID file (/data/mysql/bccc35e6e691.pid).
[root@bccc35e6e691 mysql]# mv /etc/my.cnf /etc/my.cnf.d
[root@bccc35e6e691 mysql]# /etc/init.d/mysql start
Starting MySQL.Logging to '/data/mysql/bccc35e6e691.err'.
. SUCCESS!
[root@bccc35e6e691 mysql]#
[root@7f5864324b3b bin]# ldd mysql
linux-vdso.so.1 (0x00007fff8d9bb000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f26c6fc2000)
librt.so.1 => /lib64/librt.so.1 (0x00007f26c6db9000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f26c6bb5000)
libncurses.so.5 => not found
libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f26c6820000)
libm.so.6 => /lib64/libm.so.6 (0x00007f26c649e000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f26c6286000)
libc.so.6 => /lib64/libc.so.6 (0x00007f26c5ec2000)
/lib64/ld-linux-x86-64.so.2 (0x00007f26c71e2000)
libtinfo.so.5 => not found
yum install libncurses* -y
2iAy%zBSPcfy
https://blog.csdn.net/wufaliang003/article/details/78948164
3.2启动容器
容器是在镜像的基础上来运行的,一旦容器启动了,我们就可以登录到容器中,安装自己所需的软件或应用程序。既然镜像已经下载到本地,那么如何才能启动容器呢?
只需使用以下命令即可启动容器
docker run -i -t -v /data/:/data/ 12c9d795d85a /bin/bash
看到这样的情况,说明我们现在已经登录到容器中了。
我们来看下上一条命令的大概意思
docker run <相关参数> <镜像 ID> <初始命令>
其中,相关参数包括:
-i:表示以“交互模式”运行容器
-t:表示容器启动后会进入其命令行
-v:表示需要将本地哪个目录挂载到容器中,格式:-v <宿主机目录>:<容器目录>
假设我们的所有安装程序都放在了宿主机的/root/software/目录下,现在需要将其挂载到容器的/mnt/software/目录下。
需要说明的是,不一定要使用“镜像 ID”,也可以使用“仓库名:标签名”,例如:centos:latest。
初始命令表示一旦容器启动,需要运行的命令,此时使用“/bin/bash”,表示什么也不做,只需进入命令行即可。
3.3创建JavaWeb镜像
使用如下命令提交刚才创建的docker web容器为镜像
docker commit 3fb5c3089f22 lzg/javaweb:0.1
该容器的 ID 是“3fb5c3089f22 ”,所创建的镜像名是“lzg/javaweb:0.1”,随后可使用镜像来启动 Java Web 容器。
使用docker images命令能看到如下内容:
[root@slave1 ~]# docker commit bccc35e6e691 lvdayang/initbas:0.2
sha256:55871da26284078bbd2ff74277cb40d48f6642ce00796ac0e0535bbf89bc4a0e
[root@slave1 ~]# docker ps
可见,此时已经看到了最新创建的镜像“lzg/javaweb:0.1”,其镜像 ID 是“b7be71fb07079”。正如上面所描述的那样,我们可以通过“镜像名”或“镜像 ID”来启动容器,与上次启动容器不同的是,我们现在不再进入容器的命令行,而是直接启动容器内部的 Tomcat 服务。此时,需要使用以下命令:
docker run -d -p 58080:8080 --name javaweb lzg/javaweb:0.1 /root/run.sh docker容器端口号与宿主机端口号绑定
docker run -d -p 58080:8080 --name javaweb lvdayang/initbas:0.1 /root/run.sh
docker run -d -p 58090:8080 --name initbas0.2 lvdayang/initbas:0.2 /root/run.sh
稍作解释:
-d:表示以“守护模式”执行/root/run.sh脚本,此时 Tomcat 控制台不会出现在输出终端上。
-p:表示宿主机与容器的端口映射,此时将容器内部的 8080 端口映射为宿主机的 58080 端口,这样就向外界暴露了 58080 端口,可通过 Docker 网桥来访问容器内部的 8080 端口了。
--name:表示容器名称,用一个有意义的名称命名即可。
关于 Docker 网桥的内容,需要补充说明一下。实际上 Docker 在宿主机与容器之间,搭建了一座网络通信的桥梁,我们可通过宿主机 IP 地址与端口号来映射容器内部的 IP 地址与端口号,在一系列参数后面的是“镜像名”或“镜像 ID”,怎么方便就怎么来。最后是“初始命令”,它是上面编写的运行脚本,里面封装了加载环境变量并启动 Tomcat 服务的命令。
当运行以上命令后,会立即输出一长串“容器 ID”,我们可通过docker ps命令来查看当前正在运行的容器。
然后通过 linux宿主的 ip:58080访问,就能看到 tomcat的主页了。
注意:这里使用的是宿主机的 IP 地址,与对外暴露的端口号 58080,它映射容器内部的端口号 8080。
docker run -i -t -p 58888:8080 -v /data/:/data/ --name=tomcat_8080 238e6d7313e3 /bin/bash
14-Aug-2019 09:43:31.008 INFO [Thread-6] org.apache.coyote.AbstractProtocol.destroy Destroying ProtocolHandler ["http-nio-8080"]
14-Aug-2019 09:43:31.009 INFO [Thread-6] org.apache.coyote.AbstractProtocol.destroy Destroying ProtocolHandler ["ajp-nio-8009"]
root@bfe061be86d9:/usr/local/tomcat# exit
exit
[root@slave1 webapps]#
[root@slave1 webapps]# docker run -i -t -p 59999:8080 -p 53306:3306 -v /usr/local/webapps/:/usr/local/tomcat/webapps/ --name=tomcat_58999 238e6d7313e3 /bin/bash
docker run -i -t -p 59999:8080 --net docker-at --ip 192.168.0.20 -v /usr/local/webapps/:/usr/local/tomcat/webapps/ --name=tomcat_58999 238e6d7313e3 /bin/bash
docker exec -it 4ba0fb77e0be /bin/bash
docker run -i -t -v /data/:/data/ --name=centosv0.1 centos:latest /bin/bash
docker start centosv0.1
docker exec -it centosv0.1 /bin/bash
Docker镜像的导入导出
https://blog.csdn.net/ncdx111/article/details/79878098
Docker与Dockerfile极简入门文档
https://blog.csdn.net/qq_33256688/article/details/80319673
docker run -i -t -v /data/:/data/ --name=centos_testv0.1 centos_test:v0.1 \/bin\/bash
docker start centos_testv0.1
docker exec -it centos_testv0.1 /bin/bash
docker ps -a --format "table {{.ID}}\t{{.Image}}\t{{.Names}}\t{{.Status}}"