Docker宿主機與容器之間的文件拷貝實例詳解
一,Docker運行MySQL容器
容器中的管理數(shù)據(jù)主要有兩種方式:
數(shù)據(jù)卷 Data Volumes 容器內數(shù)據(jù)直接映射到本地主機環(huán)境;
數(shù)據(jù)卷容器(Data Volume Containers 使用特定容器維護數(shù)據(jù)卷
利用MySQL鏡像安裝MySQL服務
docker run -p 3307:3306 --name mysql1 -di -v /home/javaxl/data/mysql/mysql.conf.d/:/etc/mysql/mysql.conf.d/ -v /home/javaxl/data/mysql/data/:/var/lib/mysql -v /home/javaxl/data/mysql/log/:/var/log -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
在虛擬機連接工具中創(chuàng)建MySQL數(shù)據(jù)庫,將以上代碼在鏈接工具運行即可

執(zhí)行完畢后在數(shù)據(jù)庫中嘗試鏈接
當出現(xiàn)以下錯誤時也許是沖突的原因,有兩個后多個密碼相同的數(shù)據(jù)庫,在鏈接工具中停掉其中一個即可(命令如下:docker stop 數(shù)據(jù)庫名)

從容器中拷貝文件到宿主機
docker cp tomcat1:/usr/local/tomcat/webapps/hello /javadxy/software/apache-tomcat-8.5.20/webapps

從宿主機拷貝文件到容器(與上反過來)
docker cp /javadxy/software/apache-tomcat-8.5.20/webapps tomcat1:/usr/local/tomcat/

二,數(shù)據(jù)卷
數(shù)據(jù)卷是一個可供一個或多個容器使用的特殊目錄,它將主機操作系統(tǒng)目錄直接映射進容器。
它可以提供很多有用的特性:
1.數(shù)據(jù)卷 可以在容器之間共享和重用
2.對數(shù)據(jù)卷的修改會立馬生效
3.對數(shù)據(jù)卷的更新,不會影響鏡像
4.數(shù)據(jù)卷 默認會一直存在,即使容器被刪除
將宿主機的目錄與容器的目錄進行掛載,實現(xiàn)數(shù)據(jù)共享
docker run -di --name c2 -v /home/dxy/data/:/home/xionger/data/ centos:7
前面放的是前面是宿主機目錄,后面是容器目錄
執(zhí)行以上命令

結論:不管宿主機、容器在指定目錄創(chuàng)建文件夾還是文件,都會會被共享;
三,數(shù)據(jù)卷容器
數(shù)據(jù)卷容器
如果用戶需要在多個容器之間共享一些持續(xù)更新的數(shù)據(jù),最簡單的方式是使用數(shù)據(jù)卷容器。
數(shù)據(jù)卷容器也是一個容器,但是它的目的是專門提供數(shù)據(jù)卷給其他容器掛載
docker run -di -v /home/javadxy/data/c4 --name c4 centos:7
標記部分屬于內部容器
docker run -di --volumes-from c4 --name c6 centos:7

其中c4為數(shù)據(jù)卷容器,c6為普通容器,其中c4就起到一個橋接作用,我們可以通過docker inspect查看容器的詳細情況
docker inspect c4
docker inspect c6(建議將這段copy出來后續(xù)會用的到)
會發(fā)現(xiàn)c4、c6目錄掛載情況是一樣的
結論:不管c4、c6在指定目錄創(chuàng)建文件夾還是文件,都會會被共享;
四,Dockerfile制作增強版
自定義centos,具備vim及ifconfig作用(體會學習Dockerfile的意義)
cd /javaxl/software mkdir mydocker vi mycentosDockerfile
構建鏡像
?docker build -f mycentosDockerfile -t javadxy/centos:v1.0 .
通過鏡像運行一個容器進行測試
docker run -it --name mc1 javadxy/centos:v1.0 /bin/bash
向 mycentosDockerfile 編輯內容
FROM centos:7 MAINTAINER javaxl "javaxl@qq.com" RUN yum -y install vim RUN yum install net-tools.x86_64 -y CMD /bin/bash
五,Docker制作自定義Tomcat
cd /javaxl/software mkdir mydocker vi mytomcatDockerfile? ? -------------創(chuàng)建目錄
向 mytomcatDockerfile 編輯內容
FROM centos:7
MAINTAINER javaxl "javaxl@qq.com"ENV workerDir /home/javaxl/dockerfile/3 ----------------代表容器自動跳轉的容器
WORKDIR $workerDirADD jdk-8u151-linux-x64.tar.gz $workerDir
COPY apache-tomcat-8.5.20.tar.gz $workerDir
RUN tar -xvf apache-tomcat-8.5.20.tar.gz apache-tomcat-8.5.20ENV JAVA_HOME $workerDir/jdk1.8.0_151
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV TOMCAT_HOME $workerDir/apache-tomcat-8.5.20
ENV PATH $JAVA_HOME/bin:$TOMCAT_HOME/bin:$TOMCAT_HOME/lib:$PATH ---------配置變量EXPOSE 8080 ---------開放端口
ENTRYPOINT ["/home/javaxl/dockerfile/3/apache-tomcat-8.5.20/bin/catalina.sh","run"]ADD與COPY的區(qū)別:
add是將壓縮包添加到工作目錄并解壓
copy只把壓縮包上傳至工作目錄不解壓
提示:將以上步驟完成之后不能直接執(zhí)行以下命令,要看當前目錄是否有jdk文件
以上沒問題后在執(zhí)行以下命令
docker build -f mytomcatDockerfile -t javaxl/tomcat8:v1.0 .
如圖完成
通過鏡像運行2個容器進行測試
?docker run -di --name mt1 -P javaxl/tomcat8:v1.0 ?docker run -di --name mt2 -P javaxl/tomcat8:v1.0

然后在瀏覽器上輸入地址訪問Tomcat
http://192.168.195.139:49153/
http://192.168.195.139:49154/
總結
到此這篇關于Docker宿主機與容器之間的文件拷貝的文章就介紹到這了,更多相關Docker宿主機與容器的文件拷貝內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!








