跟着尚硅谷视频学docker笔记
【摘要】 1.需要centos6.5 及其以上2.yum install -y epel-release3.yum install -y docker-io4.配置文件 /etc/sysconfig/docker5.启动 service docker start6.版本 docker version7.阿里云镜像加速配置dev.aliyun.com8. 检查docker的镜像加速是否正确ps -ef ...
1.需要centos6.5 及其以上
2.yum install -y epel-release
3.yum install -y docker-io
4.配置文件 /etc/sysconfig/docker
5.启动 service docker start
6.版本 docker version
7.阿里云镜像加速配置
dev.aliyun.com
8. 检查docker的镜像加速是否正确
ps -ef | grep docker 出现
原理
client-server
1 [root@ecs‐c7a6‐0008 ~]# docker version
2 Client:
3 Version: 1.13.1
4 API version: 1.26
5 Package version: docker‐1.13.1‐161.git64e9980.el7_8.x86_64
6 Go version: go1.10.3
7 Git commit: 64e9980/1.13.1
8 Built: Tue Apr 28 14:43:01 2020
9 OS/Arch: linux/amd64
10
11 Server:
12 Version: 1.13.1
13 API version: 1.26 (minimum version 1.12)
14 Package version: docker‐1.13.1‐161.git64e9980.el7_8.x86_64
15 Go version: go1.10.3
16 Git commit: 64e9980/1.13.1
17 Built: Tue Apr 28 14:43:01 2020
18 OS/Arch: linux/amd64
19 Experimental: false
20 [root@ecs‐c7a6‐0008 ~]#
21
命令
1 docker 帮助命令
2 docker help docker info docker version
docker 镜像命令
1 docker images -a | -q 罗列系统所有镜像,-q 只展示id
2 docekr search -s 50 --no-trunc tomcat 查找tomcat 标星50以上,展示详细信息
3 docker pull tomcat:tag 如果tag 不写就额是latest 。
4 docker rmi 镜像名,或者imageid
5 docker rmi $(docker image -qa) ,全面的批量删除,组合命令,$()
docker 容器命令上
新建并启动容器,docker run [options] image [command] [args]
options : -i -t 启动一个交互进程,退出后容器终止,相对的是守护进程
--name: 给容器起一个名字
列出所有运行中的容器, docker ps -a | -l (上次运行的容器) | -n 4(上四次运行的容器)|
-q 只展示容器id
退出容器:exit 退出终止,crtl+q+p 退出不终止
重新进入:
docker start 容器id,对exit的容器启动
停止容器:
docker stop 容器id,docker kill 强制停止
删除容器:
docker rm 容器id,删除已停止的容器。-f 强制删除
一次删除多个容器 docker rm -f $(docker ps -a -q) 或者 docker ps -a -q | xargs
docker rm , | xargs 把第一个结果作为参数传给第二个命令。
docker 容器命令下
启动后台进程
docker run -d 镜像id,通过docker ps 查不到进程。默认启动了/bin/bash 启动后立马结
束了,因为没事可做,
docker run -d 镜像id /bin/sh -c "while true;do echo hello yyy; sleep 3;done" 这个命
令通过docker ps 能看到结果。
docker logs -t -f --tail 3 容器id,查看日志 能看到 每隔2s就打印一次helllo yyy,-t 时间
戳,-f 追加,--tail 3 最后三行。。
docker top 容器id。查看容器内部的进程
docker inspect 容器id,查看容器内部细节。
重新进入容器
docker attach 容器id ,
docker exec 容器id 一个命令。相当于不进入容器,在容器外执行 一个命令 :docker exec
容器id ls -l /tmp, 这个命令比attach 强大,docker exec 容器id /bin/bash 和 docker
attach 容器id 是一样的。
从容器内拷贝内容到宿主机
docker cp 容器id 冒号 容器绝对路径 空格 本地路径
docker cp b8e31c98fe42:/tmp/ks-script-gpqu_kuo /root
docker 镜像原理
Union FS 联合文件系统:分层的,轻量级的,高性能的文件系统。它支持文件系统的修改
作为一次提交来一层层的叠加。
镜像加载原理:
bootfs 包含 bootloader 和 kernel,
rootfs linux 系统的/dev/bin 就是 ubuntu ,centos 等。
不同操作系统发行的镜像 bootfs基本一致,使用的是宿主机的kener,rootfs 是不同的。
docker pull image, 所列的每一行都是一层。
为什么分层: 最大的好处是资源共享。
特点:镜像只读,当容器启动时,给镜像添加一个可写层,所有操作都是基于可写层,下层
的镜像不会变。
docker commit 提交容器副本,使之成为一个新的镜像
docker run -it -p 8080:8080 tomcat 第一个端口时宿主机端口,第二个是容器端口
docker commit -a "" -m "" 容器id 新镜像名字
后台启动
docker run -d -p 7070:8080 tomcat
docker 容器数据卷。
做数据持久化,数据共享。
数据卷:
docker run -it -v /宿主机绝对目录:/容器内的绝对目录 镜像名。
查看数据是否挂载成功,docker inspect 容器id , 查看binds 参数 ,mounts rw true 表
示可读写
挂载只读容器
docker run -it -v /宿主机绝对目录:/容器绝对目录:ro 镜像名 : ro表示read only,主机
写内容容器可见,容器不能写数据。
Dockerfile 编写:mydockerfile
1 FROM centos
2 VOLUME ["/data01","/data02"]
3 CMD echo "finished,‐‐‐success"
4 CMD /bin/bash
docker build -f mydockerfile -t 新镜像名字 . 末尾有个点
1 docker build ‐f /ddd/mydocker/DockerFile ‐t cenos:scf .
volume 只指定了容器内的目录,没有指定宿主机目录,默认路径可以通过docker inspect
进行查询。
数据卷容器:
docker run -it --name dc04 --volumes-from 容器01
容器间数据共享,只要容器没有被全删除,数据就存在。
DockerFile:是构建docker 镜像的文件
元镜像:scratch。
dockerfile 保留字指令:
FROM 继承于哪个镜像
MAINTAINER 作者
RUN 构建容器运行的命令 ----------- RUN useradd
EXPOSE 要暴漏的端口
WORKDIR 工作目录,没有指定就是根目录
ENV 设置环境变量----my_path /usr/mytest
ADD 拷贝加解压缩。
COPY -- 将从构建上下文的目录中复制到新一层的镜像内 COPY src target, COPY
[src,targe],两种写法都可以
VOLUME -- 挂载数据卷
CMD -- 指定一个容器启动时要执行的命令,多个时会被最后一个替换,cmd 会被docker
run 后面的参数替换
ENTRYPOINT 和cmd 一样,不会被docker run 后的参数覆盖,是追加了一个命令。
ONBUILD 触发器,
dockerfile 案例:
第一:自定义mycentos,指定登录后的默认路径,内置vim,内置ifconfig 命令:
1 FROM centos
2 ENV mypath /tmp
3 WORKDIR $mypaht
4 RUN yum ‐y install vim
5 RUN yum ‐y install net‐tools
6 EXPOSE 80
7 CMD /bin/bash
8
docker build -f /ddd/mydocker/mycentos -t cenos:scf .
第二个:制作cmd版 ip查询
1 FROM centos
2 RUN yum install ‐y curl
3 CMD ["curl" ,"‐s", "https://www.ip138.com/"]
4
如果要用curl查询http请求头信息,需要用-i 参数,如果使用上面这个命令,则不成功,需
要改成entrypoint 替换cmd,展示entrypoint 没有被覆盖。
1 FROM centos
2 RUN yum install ‐y curl
3 ENTRYPOINT ["curl" ,"‐s", "https://www.ip138.com/"]
第三个: 制作onbuild ,子继承父,会展示父的onbuild 指令。
1 FROM centos
2 RUN yum install ‐y curl
3 ENTRYPOINT ["curl" ,"‐s", "https://www.ip138.com/"]
4 5
ONBUILD RUN echo "father image is build"
1 FROM scf/centos:ipfather
2 RUN yum install ‐y curl
3 ENTRYPOINT ["curl" ,"‐s", "https://www.ip138.com/"]
4
第四个:制作tomcat9
宿主机需要建目录下需要有的文件:c.txt jdk.tar.gz tomcat.tar.gz mytomcatdockerfile
1 FROM centos
2 MAINTAINER scf<scf@sc.com>
3 COPY c.txt /usr/local/cincontainer.txt
4 ADD jdk.tar.gz /usr/local/
5 ADD tomcat.tar.gz /usr/local/
6 7
RUN yum install ‐y vim
8 ENV mypath /usr/local/
9 WORKDIR $mypath
10
11 ENV JAVA_HOME /usr/local/jdk
12 ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
13 ENV CATALINE_HOME /usr/local/tomcat
14 ENV PATH $PATH:$JAVA_HOME/bin:$CATALINE_HOME/bin:$CATALINE_HOME/lib
15
16 EXPOSE 8080
17
18 CMD ["/usr/local/tomcat/bin/startup.sh && tail ‐f /usr/local/tomcat/log/
catalina.out"]
构建镜像
docker build -f /ddd/mydocker/mytomcatdockerfile -t mytocmat:scf .
启动镜像:
docker run -d -p 9090:8080 -v /home/webapp/test:/usr/local/tomcat/webapps/test
-v /home/webapp/logs:/usr/local/tomcat/logs --privileged=true mytomcat:scf
docker 总结
docker 常用软件安装:
mysql
docker run -p 12345:3306 --name mysql
-v /home/mysql/my.cnf:/etc/my.cnf
-v /home/mysql/logs:/logs
-v /home/mysql/data:/var/lib/mysql
-d mysql:5.6
数据备份:
docekr exec 容器id sh -c ‘exec mysqldump --all-databases -uroot -p"123456"’ >
/home/mysql/backup/alldtabasesql
redis
docker run -p 6379:6379
-v
-v
-v
-d redis-server /../../redis-server.conf
=============================================
案例四:制作ant
1 [root@ecs‐c7a6‐0008 ant]# ls
2 apache‐ant‐1.9.15 apache‐ant‐1.9.15‐bin.tar.gz code jdk1.6.0_27 jdk1.6.0_
27.tar.gz jdk‐6u27‐linux‐x64.bin myantdockerfile
3
2.yum install -y epel-release
3.yum install -y docker-io
4.配置文件 /etc/sysconfig/docker
5.启动 service docker start
6.版本 docker version
7.阿里云镜像加速配置
dev.aliyun.com
8. 检查docker的镜像加速是否正确
ps -ef | grep docker 出现
原理
client-server
1 [root@ecs‐c7a6‐0008 ~]# docker version
2 Client:
3 Version: 1.13.1
4 API version: 1.26
5 Package version: docker‐1.13.1‐161.git64e9980.el7_8.x86_64
6 Go version: go1.10.3
7 Git commit: 64e9980/1.13.1
8 Built: Tue Apr 28 14:43:01 2020
9 OS/Arch: linux/amd64
10
11 Server:
12 Version: 1.13.1
13 API version: 1.26 (minimum version 1.12)
14 Package version: docker‐1.13.1‐161.git64e9980.el7_8.x86_64
15 Go version: go1.10.3
16 Git commit: 64e9980/1.13.1
17 Built: Tue Apr 28 14:43:01 2020
18 OS/Arch: linux/amd64
19 Experimental: false
20 [root@ecs‐c7a6‐0008 ~]#
21
命令
1 docker 帮助命令
2 docker help docker info docker version
docker 镜像命令
1 docker images -a | -q 罗列系统所有镜像,-q 只展示id
2 docekr search -s 50 --no-trunc tomcat 查找tomcat 标星50以上,展示详细信息
3 docker pull tomcat:tag 如果tag 不写就额是latest 。
4 docker rmi 镜像名,或者imageid
5 docker rmi $(docker image -qa) ,全面的批量删除,组合命令,$()
docker 容器命令上
新建并启动容器,docker run [options] image [command] [args]
options : -i -t 启动一个交互进程,退出后容器终止,相对的是守护进程
--name: 给容器起一个名字
列出所有运行中的容器, docker ps -a | -l (上次运行的容器) | -n 4(上四次运行的容器)|
-q 只展示容器id
退出容器:exit 退出终止,crtl+q+p 退出不终止
重新进入:
docker start 容器id,对exit的容器启动
停止容器:
docker stop 容器id,docker kill 强制停止
删除容器:
docker rm 容器id,删除已停止的容器。-f 强制删除
一次删除多个容器 docker rm -f $(docker ps -a -q) 或者 docker ps -a -q | xargs
docker rm , | xargs 把第一个结果作为参数传给第二个命令。
docker 容器命令下
启动后台进程
docker run -d 镜像id,通过docker ps 查不到进程。默认启动了/bin/bash 启动后立马结
束了,因为没事可做,
docker run -d 镜像id /bin/sh -c "while true;do echo hello yyy; sleep 3;done" 这个命
令通过docker ps 能看到结果。
docker logs -t -f --tail 3 容器id,查看日志 能看到 每隔2s就打印一次helllo yyy,-t 时间
戳,-f 追加,--tail 3 最后三行。。
docker top 容器id。查看容器内部的进程
docker inspect 容器id,查看容器内部细节。
重新进入容器
docker attach 容器id ,
docker exec 容器id 一个命令。相当于不进入容器,在容器外执行 一个命令 :docker exec
容器id ls -l /tmp, 这个命令比attach 强大,docker exec 容器id /bin/bash 和 docker
attach 容器id 是一样的。
从容器内拷贝内容到宿主机
docker cp 容器id 冒号 容器绝对路径 空格 本地路径
docker cp b8e31c98fe42:/tmp/ks-script-gpqu_kuo /root
docker 镜像原理
Union FS 联合文件系统:分层的,轻量级的,高性能的文件系统。它支持文件系统的修改
作为一次提交来一层层的叠加。
镜像加载原理:
bootfs 包含 bootloader 和 kernel,
rootfs linux 系统的/dev/bin 就是 ubuntu ,centos 等。
不同操作系统发行的镜像 bootfs基本一致,使用的是宿主机的kener,rootfs 是不同的。
docker pull image, 所列的每一行都是一层。
为什么分层: 最大的好处是资源共享。
特点:镜像只读,当容器启动时,给镜像添加一个可写层,所有操作都是基于可写层,下层
的镜像不会变。
docker commit 提交容器副本,使之成为一个新的镜像
docker run -it -p 8080:8080 tomcat 第一个端口时宿主机端口,第二个是容器端口
docker commit -a "" -m "" 容器id 新镜像名字
后台启动
docker run -d -p 7070:8080 tomcat
docker 容器数据卷。
做数据持久化,数据共享。
数据卷:
docker run -it -v /宿主机绝对目录:/容器内的绝对目录 镜像名。
查看数据是否挂载成功,docker inspect 容器id , 查看binds 参数 ,mounts rw true 表
示可读写
挂载只读容器
docker run -it -v /宿主机绝对目录:/容器绝对目录:ro 镜像名 : ro表示read only,主机
写内容容器可见,容器不能写数据。
Dockerfile 编写:mydockerfile
1 FROM centos
2 VOLUME ["/data01","/data02"]
3 CMD echo "finished,‐‐‐success"
4 CMD /bin/bash
docker build -f mydockerfile -t 新镜像名字 . 末尾有个点
1 docker build ‐f /ddd/mydocker/DockerFile ‐t cenos:scf .
volume 只指定了容器内的目录,没有指定宿主机目录,默认路径可以通过docker inspect
进行查询。
数据卷容器:
docker run -it --name dc04 --volumes-from 容器01
容器间数据共享,只要容器没有被全删除,数据就存在。
DockerFile:是构建docker 镜像的文件
元镜像:scratch。
dockerfile 保留字指令:
FROM 继承于哪个镜像
MAINTAINER 作者
RUN 构建容器运行的命令 ----------- RUN useradd
EXPOSE 要暴漏的端口
WORKDIR 工作目录,没有指定就是根目录
ENV 设置环境变量----my_path /usr/mytest
ADD 拷贝加解压缩。
COPY -- 将从构建上下文的目录中复制到新一层的镜像内 COPY src target, COPY
[src,targe],两种写法都可以
VOLUME -- 挂载数据卷
CMD -- 指定一个容器启动时要执行的命令,多个时会被最后一个替换,cmd 会被docker
run 后面的参数替换
ENTRYPOINT 和cmd 一样,不会被docker run 后的参数覆盖,是追加了一个命令。
ONBUILD 触发器,
dockerfile 案例:
第一:自定义mycentos,指定登录后的默认路径,内置vim,内置ifconfig 命令:
1 FROM centos
2 ENV mypath /tmp
3 WORKDIR $mypaht
4 RUN yum ‐y install vim
5 RUN yum ‐y install net‐tools
6 EXPOSE 80
7 CMD /bin/bash
8
docker build -f /ddd/mydocker/mycentos -t cenos:scf .
第二个:制作cmd版 ip查询
1 FROM centos
2 RUN yum install ‐y curl
3 CMD ["curl" ,"‐s", "https://www.ip138.com/"]
4
如果要用curl查询http请求头信息,需要用-i 参数,如果使用上面这个命令,则不成功,需
要改成entrypoint 替换cmd,展示entrypoint 没有被覆盖。
1 FROM centos
2 RUN yum install ‐y curl
3 ENTRYPOINT ["curl" ,"‐s", "https://www.ip138.com/"]
第三个: 制作onbuild ,子继承父,会展示父的onbuild 指令。
1 FROM centos
2 RUN yum install ‐y curl
3 ENTRYPOINT ["curl" ,"‐s", "https://www.ip138.com/"]
4 5
ONBUILD RUN echo "father image is build"
1 FROM scf/centos:ipfather
2 RUN yum install ‐y curl
3 ENTRYPOINT ["curl" ,"‐s", "https://www.ip138.com/"]
4
第四个:制作tomcat9
宿主机需要建目录下需要有的文件:c.txt jdk.tar.gz tomcat.tar.gz mytomcatdockerfile
1 FROM centos
2 MAINTAINER scf<scf@sc.com>
3 COPY c.txt /usr/local/cincontainer.txt
4 ADD jdk.tar.gz /usr/local/
5 ADD tomcat.tar.gz /usr/local/
6 7
RUN yum install ‐y vim
8 ENV mypath /usr/local/
9 WORKDIR $mypath
10
11 ENV JAVA_HOME /usr/local/jdk
12 ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
13 ENV CATALINE_HOME /usr/local/tomcat
14 ENV PATH $PATH:$JAVA_HOME/bin:$CATALINE_HOME/bin:$CATALINE_HOME/lib
15
16 EXPOSE 8080
17
18 CMD ["/usr/local/tomcat/bin/startup.sh && tail ‐f /usr/local/tomcat/log/
catalina.out"]
构建镜像
docker build -f /ddd/mydocker/mytomcatdockerfile -t mytocmat:scf .
启动镜像:
docker run -d -p 9090:8080 -v /home/webapp/test:/usr/local/tomcat/webapps/test
-v /home/webapp/logs:/usr/local/tomcat/logs --privileged=true mytomcat:scf
docker 总结
docker 常用软件安装:
mysql
docker run -p 12345:3306 --name mysql
-v /home/mysql/my.cnf:/etc/my.cnf
-v /home/mysql/logs:/logs
-v /home/mysql/data:/var/lib/mysql
-d mysql:5.6
数据备份:
docekr exec 容器id sh -c ‘exec mysqldump --all-databases -uroot -p"123456"’ >
/home/mysql/backup/alldtabasesql
redis
docker run -p 6379:6379
-v
-v
-v
-d redis-server /../../redis-server.conf
=============================================
案例四:制作ant
1 [root@ecs‐c7a6‐0008 ant]# ls
2 apache‐ant‐1.9.15 apache‐ant‐1.9.15‐bin.tar.gz code jdk1.6.0_27 jdk1.6.0_
27.tar.gz jdk‐6u27‐linux‐x64.bin myantdockerfile
3
1FROM centos:6
2 MAINTAINER scf<scf@scf.com>
3 #COPY jdk‐6u27‐linux‐x64.bin /usr/local/jdk‐6u27‐linux‐x64.bin
4 #RUN chmod +x /usr/local/jdk‐6u27‐linux‐x64.bin
5
2 MAINTAINER scf<scf@scf.com>
3 #COPY jdk‐6u27‐linux‐x64.bin /usr/local/jdk‐6u27‐linux‐x64.bin
4 #RUN chmod +x /usr/local/jdk‐6u27‐linux‐x64.bin
5
6ENV mypath /usr/local/
7 WORKDIR $mypath
8 #RUN ./jdk‐6u27‐linux‐x64.bin
9 ADD jdk1.6.0_27.tar.gz /usr/local
10 ADD apache‐ant‐1.9.15‐bin.tar.gz /usr/local
11
12 ENV JAVA_HOME /usr/local/jdk1.6.0_27
13 ENV ANT_HOME /usr/local/apache‐ant‐1.9.15
14 ENV PATH $PATH:$JAVA_HOME/bin:$ANT_HOME/bin
15
16 CMD /bin/bash
17
1 #docker build ‐f myantdockerfile ‐t myant:java1.6 .
1 [root@ecs‐c7a6‐0008 ant]# docker run ‐it ‐v
/root/docker/ant/code/tbmoln/:/usr/local/tbmoln 21fb32a918eb ant ‐f ./tbmol
n/build‐tbm.xml
7 WORKDIR $mypath
8 #RUN ./jdk‐6u27‐linux‐x64.bin
9 ADD jdk1.6.0_27.tar.gz /usr/local
10 ADD apache‐ant‐1.9.15‐bin.tar.gz /usr/local
11
12 ENV JAVA_HOME /usr/local/jdk1.6.0_27
13 ENV ANT_HOME /usr/local/apache‐ant‐1.9.15
14 ENV PATH $PATH:$JAVA_HOME/bin:$ANT_HOME/bin
15
16 CMD /bin/bash
17
1 #docker build ‐f myantdockerfile ‐t myant:java1.6 .
1 [root@ecs‐c7a6‐0008 ant]# docker run ‐it ‐v
/root/docker/ant/code/tbmoln/:/usr/local/tbmoln 21fb32a918eb ant ‐f ./tbmol
n/build‐tbm.xml
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)