1.Docker笔记
#{安装Docker}:yum install docker
#{查看Docker的版本号}:docker -v
#{启动Docker}:service docker start
#{停止Docker}:service docker stop
#{重启Docker}:service docker restart
#{查看Docker状态}:service docker status
#{设置开机启动Docker}:chkconfig docker on
#{查看Docker概要信息}:docker info
#{查看Docker帮助文档}:docker --help
{Docker的基本组成}
image(镜像) :镜像就是一个可读的模板,可执行的独立软件包。镜像可以用来创建Docker容器,一个镜像可以创建多个容器,Docker镜像是由文件系统叠加而成。
container(容器):Docker利用容器可以独立运行一个或一组应用。容器是用镜像创建的实例。
repository(仓库:公开库或私有库):是集中存放镜像文件的场所,需要的时候可以从仓库拉下来,我们也可以把 镜像发布到仓库中。
#{列出Docker下的所有镜像}:docker images
-----------------------------------------------------------------------------------------
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/mysql latest 7bb2586065cd 2 months ago 477 MB
-----------------------------------------------------------------------------------------
{参数说明}
REPOSITORY:镜像所在仓库的名称
TAG:镜像标签
IMAGE ID:镜像的ID值
CREATED:镜像的创建日期
SIZE:镜像的大小
#{docker images [options] 的options说明}
-a:列出本地所有镜像(含中间映射层)
-q:只显示镜像的ID值
--digests:显示镜像的摘要信息
--no-trunc:显示完整的镜像信息
{pull下来的镜像的存储位置}: cd /var/lib/docker/
#{搜索镜像}:docker search [OPTIONS] [镜像名称]
-----------------------------------------------------------------------------------------
[root@localhost docker]# docker search tomcat
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED docker.io docker.io/mysql MySQL... 9289 [OK] [OK]
-----------------------------------------------------------------------------------------
{参数说明}
NAME:仓库名称
DESCRIPTION:镜像描述
STARS:用户评价,反应一个镜像的受欢迎程度
OFFICIAL:是否官方
AUTOMATED:自动构建,表示该镜像由Docker Hub自动构建流程创建的
{OPTIONS说明}
--no-trunc : 显示完整的镜像描述
-s : 列出收藏数不小于指定值的镜像。
--automated : 只列出 automated build类型的镜像.
#{拉取镜像}: docker pull [镜像名称][:TAG]
Docker Hub(国外): https://hub.docker.com
Dao Cloud(国内): https://hub.daocloud.io/
{Docker镜像服务提供者ustc}
https://lug.ustc.edu.cn/wiki/mirrors/help/docker
{配置镜像服务}
1. vi /etc/docker/daemon.json
2. {"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]}
3. service docker restart
#{删除镜像}:
删除单个: docker rmi -f [镜像ID]
删除多个: docker rmi -f [镜像名1]:TAG [镜像名2]:TAG
删除全部: docker rmi -f $(docker images -qa)
#{查看容器}:docker ps [OPTIONS]
OPTIONS说明
-a :列出当前所有正在运行的容器+历史上运行过的
-l :显示最近创建的容器。
-n:显示最近n个创建的容器。
-q :静默模式,只显示容器编号。
--no-trunc :不截断输出
#{创建与启动容器}: docker run [OPTIONS] [镜像名:TAG 或 镜像ID] [COMMAND][ARG...]
OPTIONS说明
-i:表示运行容器
-t:表示容器启动后,并且进入
--name:表示为创建的容器命名
-v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
#{交互式容器(启动并登录进去)}
使用镜像centos:latest以交互模式启动一个容器,在容器内执行/bin/bash命令,并取名为mycentos
docker run -it --name=mycentos centos:7 /bin/bash
使用exit命令退出当前容器
然后用docker ps -a 命令查看发现该容器也随之停止
#{守护式容器(先创建容器,然后登录进去)}
创建一个守护式容器:如果对于一个需要长期运行的容器来说,我们可以创建一个守护式容器。命令如下(容器名称不能重复):docker run -di --name=mycentos2 centos:7
#{登录守护式容器方式}
docker exec -it [容器名或容器ID] /bin/bash (exit退出时,容器不会停止)
#{启动容器}: docker start [容器ID值或容器名][容器ID值或容器名][...]
#{停止容器}: docker stop [容器ID值或容器名][容器ID值或容器名][...]
#{重启容器}: docker restart [容器ID值或容器名]
#{强制停止容器}: docker kill [容器ID值或容器名]
#{文件拷贝}
将宿主机文件拷贝到容器内:docker cp [需要拷贝的文件或目录] [容器名称]:[容器中目录]
docker cp 1.txt mycentos2:/root/
将容器内文件拷贝到宿主机:docker cp [容器名称]:[容器目录下的文件] [宿主机的目录]
docker cp mycentos2:/root/111.txt /root/
#{目录挂载}
在创建容器的时候,将宿主机的目录和容器内的目录进行绑定映射关系,那么修改宿主机的某个目录下的文件就可以影响到容器中文件。
创建容器 添加-v参数 后边为 宿主机目录:容器目录
docker run -di --name=mycentos2 -v /usr/local/myhtml:/usr/local/myhtml centos:7
如果共享的是多级的目录,可能会出现权限不足的提示:Permission denied
因为CentOS7中的安全模块selinux把权限禁掉了,我们需要添加参数 --privileged=true 来解决挂载的目录没有权限的问题
docker run -di --name=mycentos3 -v /usr/local/myhtml:/usr/local/myhtml --privileged=true centos:7
#{查看容器IP地址}
docker inspect mycentos3
docker inspect --format='{{.NetworkSettings.IPAddress}}' mycentos3 :直接获取容器IP
ping [容器IP地址]
#{删除容器(只能删除停止的容器)}
删除所有容器:docker rm 'docker ps - a -q'
#{docker 设置初始密码,进入mysql}
docker run -di --name=mysql5.5.49 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root 2f94d2a2ac89
docker exec -it mysql5.5.49 /bin/bash
mysql -u root -p
root
#{开启MySql远程访问权限}
use mysql;
update user set host='%' where user='root';
flush privileges;
#{UnionsFS(联合文件系统)}
镜像是一种文件,也是一个联合文件系统,Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统。
#{为什么Docker镜像要采用UnionFS这种分层结构}
最大得一个好处就是---共享资源
#{Dockefile是什么?}
Dockerfile是描述镜像构建的一种文件。
#编写Dokerfile--(bulid)-->Docker镜像--(run)-->Docker容器
#{Dockerfile的结构}
1.基础镜像信息
2.维护者信息
3.镜像操作指令
4.容器启动指令
------------------------------
#基于centos镜像
FROM centos
#维护人的信息
MAINTAINER The CentOS Project <303323496@qq.com>
#安装httpd软件包
RUN yum -y update
RUN yum -y install httpd
#开启80端口
EXPOSE 80
#复制网站首页文件至镜像中web站点下
ADD index.html /var/www/html/index.html
#复制该脚本至镜像中,并修改其权限
ADD run.sh /run.sh
RUN chmod 775 /run.sh
#当启动容器时执行的脚本文件
CMD ["/run.sh"]
----------------------------------
#{Dockerfile常用指令}
FROM:指定基础镜像
MAINTAINER:指定维护者信息
RUN:执行命令行命令
CMD:启动容器时执行的Shell命令
EXPOSE:声明运行的服务端口号
ENV:为docker容器设置环境变量
ADD:拷贝文件或目录到镜像中,有压缩包自动解压
COPY:拷贝文件
ENTRYPOINT:启动容器时执行的Shell命令,类似CMD
VOLUME: 挂载目录
USER:为RUN、CMD和ENTRYPOINT执行Shell命令指定运行用户
WORKDIR:Docker默认的工具目录是/,如果想让其他指令在指定的目录下执行,就得靠 WORKDIR
#{编译Dockerfile文件命令}:docker build -t [新镜像名]:TAG . 点表示当前目录
#{列出镜像的变更历史}: docker history [镜像名]
#{Docker手动部署springBoot项目}
#{Idea远程连接Docker实现一键部署}
1. 编辑服务器上docker.service文件 vim /usr/lib/systemd/system/docker.service
2.在 --seccomp-profile 的下一行添加 -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock \
3. systemctl daemon-reload
4. service docker restart
5. 测试远程连接是否正常 curl http://localhost:2375/version
6. 然后开启端口或者关闭防火墙 二选一
firewall-cmd --zone=public --add-port=2375/tcp --permanent
chkconfig iptables off
7.在浏览器访问http://[宿主机IP地址]:2375/version
8.配置Idea连接到远程的Docker
9.在idea中使用docker-maven-plugin
10.pom.xml中添加完依赖后,点击maven的package命令自动构建镜像
---------------------------------------------------------------------------------
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<executions>
<execution>
<id>build-image</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<configuration>
<imageName>bruceliu/${project.artifactId}</imageName>
<imageTags>
<imageTag>latest</imageTag>
</imageTags>
<baseImage>java</baseImage>
<maintainer>bruceliu@email.com</maintainer>
<workdir>/ROOT</workdir>
<cmd>["java", "-version"]</cmd>
<entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
<dockerHost>http://122.51.50.249:2375</dockerHost>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
---------------------------------------------------------------------------------