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}}"