Docker学习笔记

目录

一、安装Docker

在Linux中安装docker CE(社区免费版)

Docker镜像加速器

 二、Docker镜像命令

1.docker列出镜像:docker image ls

2.获取镜像

 3.docker删除本地镜像

三、docker容器命令

1.查看运行的镜像:doucker ps

2.查看所有容器:docker ps -a

3.docker启动容器(创建):docker run 参数

4.docker停止容器:docker stop ID或name

5.启动docker容器:docker start ID或name

6.删除容器:docker rm ID或name

7.删除所有容器:

8.进入容器内部命令:docker exec -it 容器名称 bash

 9.docker 拷贝文件

四、daocker数据卷

 1.创建一个tomcat容器并且是数据卷

五、docker安装Mysql8.*以前版本

 六、安装MySQL 8.* 版本

七、Docker定制镜像

Dockerfile常用命令

实例,创建一个简单的镜像

八、Docker部署SpringBoot项目

九、Idea集成docker实现镜像打包一键部署

十、IDEA整合Docker CA加密认证


一、安装Docker

在Linux中安装docker CE(社区免费版)

1.下载虚拟机并准备好一个CentOS 7系统

2.你过你之前安装过docker,则需要先移除,执行以下命令

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine;

3.安装一些必要的系统工具(安装所需的软件包),执行以下命令

yum install -y yum-utils device-mapper-persistent-data 1vm2

4.添加软件源信息(阿里云源)

sudo yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo;

5.更新yum缓存

sudo yum makecache fast

 6.安装Docker CE

sudo yum -y install docker-ce

 7.启动Docker后台服务

systemctl start docker

8.重启Docker服务

systemctl restart docker

Docker镜像加速器

鉴于国内网络问题,后续拉取Docker镜像设、十分缓慢,我们可以需要配置加速器来解决。

1.在/etc/docker/目录下新建daemon.json

vi daemon.json

2.在daemon.json添加如下内容

{
"registry-mirrors":["https://gxeo3yz7.mirror.aliyuncs.com"]
}

3.重启docker文件

systemctl daemon-reload

4.重启docker

systemctl restart docker

5.查看镜像是否生效

docker info

 显示如下,表示生效

==============================

 二、Docker镜像命令

1.docker列出镜像:docker image ls

2.获取镜像

从docker镜像仓库获取镜像的命令是:docker pull 镜像名

 3.docker删除本地镜像

docker image rmi 镜像ID

三、docker容器命令

1.查看运行的镜像:doucker ps

2.查看所有容器:docker ps -a

3.docker启动容器(创建):docker run 参数

        -i 启动容器时,运行的命令结束后,容器依然存活,没有退出(默认是会退出,即停止的)

        -t 为容器放入标准输入虚拟一个tty

        -d 后台运行

        --rm 容器启动后,执行停止命令就销毁

        --name 给容器起一个自定义名称

        -p 宿主机 :内部端口

        例,创建一个tomcat容器:docker run -d --name tomcat-8080 -p 8080:8080 tomcat

4.docker停止容器:docker stop ID或name

        停止当前所有容器:docker stop $(docker ps -a -q)

5.启动docker容器:docker start ID或name

6.删除容器:docker rm ID或name

7.删除所有容器:

        先把所有容器停止:docker stop $(docker ps -a -q)

        在删除所有容器:docker rm $(docker ps -a -q)

        不停止容器直接删除会报错

8.进入容器内部命令:docker exec -it 容器名称 bash

 9.docker 拷贝文件

        docker cp 拷贝源   拷贝目的

四、daocker数据卷

 

 1.创建一个tomcat容器并且是数据卷

docker run -d --name tomcat-8080 -p 8080:8080 -v /opt/docker-volumn/qfnj:/usr/local/tomcat/webapps/qfnj tomcat

 在宿主机 /opt/docker-volumn/qfnj目录下修改内容,会马上同步到容器/usr/local/tomcat/webapps/qfnj 中

五、docker安装Mysql8.*以前版本

1.下载镜像

docker pull mysql:5.6

2.创建并启动Mysql容器

docker run -d --name mysql-001 -p 3306:3306 -e MYSQL_ROOT_PASSWORD='333' mysql:5.6

设置密码为333

3.进入mysql容器内部

docker exec -it mysql-001 bash

4.登录mysql

mysql -uroot -p333

5.授权其他机器登陆

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '333' WITH GRANT OPTION;

6.刷新权限

FLUSH PRIVILEGES;

7.使用Navicat for MySQL工具连接

 六、安装MySQL 8.* 版本

1.下载镜像

docker pull mysql

2.创建并启动Mysql容器

docker run -d --name mysql8 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=333 mysql

3.进入mysql容器内部

docker exec -it mysql bash

4.登录mysql

mysql -uroot -p333

5.授权其他机器登陆

ALTER USER 'root'@'localhost' IDENTIFIED BY '333';

#参数说明:
-p 3306:3306 :映射容器服务的 3306 端口到宿主机的 3306 端口,外部主机可以直接通过 宿主机ip:3306
访问到 MySQL 的服务。
MYSQL_ROOT_PASSWORD=guoweixin:设置 MySQL 服务 root 用户的密码。

七、Docker定制镜像

镜像的定制实际上就是定制每一层所添加的配置、文件。 如果我们可以把每一层修改、安装、构建、操作的命令都写
入一个脚本,用这个脚本来构建、定制镜像, 那么之前提及的无法重复的问题、镜像构建透明性的问题、体积的问题
就都会解决。这个脚本就是 Dockerfile
Dockerfile 是一个文本文件,其内包含了一条条的指令 (Instruction) ,每一条指令构建一层,因此每一条指令的内容,
就是描述该层应当如何构建。

Dockerfile常用命令

1.FROM指定基础镜像
基础镜像不存在会在Docker Hub上拉去(一般会是文件的第一个指令) 使用格式:
FROM <镜像>:[tag]
FROM <镜像>@digest[校验码] 当前主机没有此镜像时,会自动去官网HUB下载
2.ENV
ENV指令可以用于为docker容器设置环境变量 ENV设置的环境变量,可以使用 docker inspect命令来查看。同时
还可以使用docker run --env =来修改环境变量。
具体用法:
 ENV JAVA_HOME /usr/local/jdk 
 ENV JRE_HOME $JAVA_HOME/jre 
 ENV CLASSPATH $JAVA_HOME/lib/:$JRE_HOME/lib/
 ENV PATH $PATH:$JAVA_HOME/bin/

3.WORKDIR 用来切换工作目录的。

Docker 默认的工作目录是/,只有 RUN 能执行 cd 命令切换目录,而且还只作用在当下下的 RUN,也就是说每一 个 RUN 都是独立进行的。
如果想让其他指令在指定的目录下执行,就得靠 WORKDIR。WORKDIR 动作的目录改变是持久的,不用每个指 令前都使用一次 WORKDIR。
WORKDIR /usr/local/tomcat/

4.RUN

RUN 指令是用来执行命令行命令的。由于命令行的强大能力,RUN 指令在定制镜像时是最常用的指令之一。其格式
有两种:
• shell 格式:RUN <命令>,就像直接在命令行中输入的命令一样。刚才写的 Dockerfile 中的 RUN 指令就是
这种格式。
• exec 格式:RUN ["可执行文件", "参数1", "参数2"],这更像是函数调用中的格式
RUN 就像 Shell 脚本一样可以执行命令,那么我们是否就可以像 Shell 脚本一样把每个命令对应一个 RUN 呢?比如这 样:
RUN apt-get update 
RUN apt-get install -y gcc libc6-dev make 
RUN wget http://download.redis.io/releases/redis-4.0.1.tar.gz 
RUN tar xzf redis-4.0.1.tar.gz 
RUN cd redis-4.0.1

实例,创建一个简单的镜像

需求:创建一个镜像(基于tomcat)里面要有一个index.html,并写入Hello qfnj Docker
1、在宿主机创建一空白目录
mkdir -p /usr/local/docker/demo1
2、在该目录下,创建一文件Dockerfile
vim Dockerfile
3、其内容为:
FROM tomcat //指定tomcat最新版本镜像
RUN echo 'Hello Java'>/usr/local/tomcat/webapps/ROOT/index.html
WORKDIR 用来切换目录的
FROM tomcat
RUN mkdir -p /usr/local/tomcat/webapps/ROOT
RUN echo 'Hello java!'>/usr/local/tomcat/webapps/ROOT/index.html
WORKDIR /usr/local/tomcat/webapps/
4、构建镜像 docker build
docker build -t demo1 . 
-t:指定要创建镜像的名称
. :Dockerfile文件所在目录,可以指定Dockerfile的绝对路径
5、运行镜像所在容器
docker run --rm --name demo1-8080 -p 8080:8080 -d demo1
6.网页访问即可

八、Docker部署SpringBoot项目

1.先准备好一个springboot.jar

2.通过传输工具把jar包传到Linux系统/usr/local/docker/docker-springboot-01目录

3.并创建Dockerfile文件         vi

 Dockerfile内容如下

FROM java:8
VOLUME /tmp
ADD docker-springboot-01-0.0.1-SNAPSHOT.jar docker-springboot-01.jar
EXPOSE 8080
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/docker-springboot-01.jar"]

4.构建镜像

docker build -t docker-springboot-01 .

 5.查看镜像

 6.创建docker-springboot-01容器

九、Idea集成docker实现镜像打包一键部署

执行以下步骤要保证docker服务正在运行

1.docker开启远程访问

#修改该Docker服务文件 
vi /lib/systemd/system/docker.service 

#修改ExecStart这行 
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

2.修改完Docker服务文件,执行以下命令

1.#重新加载配置文件
systemctl daemon-reload

2.#重启服务
systemctl restart docker.service

#以上两条命令都执行成功,3/4可不用执行

3.#查看端口是否开启
netstat -nlpt #如果找不到netstat命令,可进行安装。yum install net-tools

4.#直接curl看是否生效
curl http://127.0.0.1:2375/info

3.IDEA中下载Docker插件

打开Idea,从File->Settings->Plugins->Install JetBrains plugin进入插件安装界面,
在搜索框中输入docker,可以看到Docker integration,点击右边的Install按钮进行安装。
安装后重启Idea。

 4.IDEA配置Docker

  配置docker,连接到远程docker服务。
从File->Settings->Build,Execution,Deployment->Docker打开配置界面  

 连接不成功,需要Linux需要开放2375端口

#查看开放端口
firewall-cmd --list-ports

#开启2375端口
firewall-cmd --zone=public --add-port=2375/tcp --permanent

#重启防火墙
firewall-cmd --reload

 从新输入连接dockerURL,此时显示连接成功

5.在IDEA中查看服务器上docker的镜像和容器

 

6.docker-maven-plugin

  传统过程中,打包、部署、等。
而在持续集成过程中,项目工程一般使用 Maven 编译打包,然后生成镜像,通过镜像上线,能够大大提供上线效 率,同时能够快速动态扩容,快速回滚,着实很方便。docker-maven-plugin 插件就是为了帮助我们在Maven工程 中,通过简单的配置,自动生成镜像并推送到仓库中。
pom.xml添加插件
 
<plugin>
				<groupId>com.spotify</groupId>
				<artifactId>docker-maven-plugin</artifactId>
				<version>1.0.0</version>
				<configuration>
				<!-- 镜像名称 -->
				<imageName>${docker.images.prefix}/${project.artifactId}</imageName>
				<!--指定镜像版本号-->
				<imageTags>
					<imageTag>${project.version}}</imageTag>
				</imageTags>
				<!-- 基础镜像jdk 1.8-->
				<baseImage>java</baseImage>
				<!-- 制作者提供本人信息 -->
				<maintainer>srz</maintainer>
				<!--切换到/ROOT目录 -->
				<workdir>/ROOT</workdir>
					<cmd>["java", "-version"]</cmd>
					<entryPoint>["java", "-jar", "${project.build.finalName}.jar"]</entryPoint>
				<!--
				指定 Dockerfile 路径 <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
				-->
				<!--指定远程 docker api地址-->
				<dockerHost>http://192.168.92.130:2375</dockerHost>

				<!-- 这里是复制 jar 包到 docker 容器指定目录配置 -->
				<resources>
					<resource>
					<targetPath>/ROOT</targetPath>
					<!--用于指定需要复制的根目录,${project.build.directory}表示target目录-->
					<directory>${project.build.directory}</directory>
					<!--用于指定需要复制的文件。${project.build.finalName}.jar指的是打包后的jar 包文件。-->
					<include>${project.build.finalName}.jar</include>
					</resource>
				</resources>
				</configuration>
			</plugin>

7.执行命令,在IDEA中

对项目进行 打包。并构建镜像 到 Docker
mvn clean package docker:build

 

十、IDEA整合Docker CA加密认证

1.创建ca文件夹,存放ca私钥和公钥

mkdir -p /usr/local/ca
cd /usr/local/ca/
 2.生成ca私钥和公钥
openssl genrsa -aes256 -out ca-key.pem 4096

 

 docker

3.依次输入密码、国家、省、市、组织名称、邮箱

openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem

密码就是步骤2的密码,剩下的随便输入

4.生成server-key.pem

openssl genrsa -out server-key.pem 4096

5.ca来签署公钥

由于 TLS 连接可以通过 IP 地址和 DNS 名称进行,所以在创建证书时需要指定 IP 地址。例如,允许使用 10.10.10.20和 127.0.0.1 进行连接 :
$HOST 换成你自己服务器外网的 IP 或者域名
openssl req -subj "/CN=$HOST" -sha256 -new -key server-key.pem -out server.csr

6.配置白名单

1 允许指定 ip 可以连接到服务器的 docker ,可以配置 ip ,用逗号分隔开。
2 因为已经是 ssl 连接,所以我推荐配置 0.0.0.0, 也就是所有 ip 都可以连接 ( 但只有拥有证书的才可以连接成功 ) ,这样配置好之后公司其他人也可以使用。
$HOST依旧是你服务器外网的IP或者域名,请自行替换。
如果填写的是 ip 地址 命令如下 echo subjectAltName = IP:$HOST,IP:0.0.0.0 >> extfile.cnf
如果填写的是域名 命令如下 echo subjectAltName = DNS:$HOST,IP:0.0.0.0 >> extfile.cnf

7.执行命令

Docker 守护程序密钥的扩展使用属性设置为仅用于服务器身份验证 :
echo extendedKeyUsage = serverAuth >> extfile.cnf

8.生成签名证书

openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem \
-CAcreateserial -out server-cert.pem -extfile extfile.cnf

9.生成客户端的key.pem

openssl genrsa -out key.pem 4096
openssl req -subj '/CN=client' -new -key key.pem -out client.csr

10.要使用秘钥适合客户端身份验证

创建扩展配置文件:

echo extendedKeyUsage = clientAuth >> extfile.cnf
echo extendedKeyUsage = clientAuth > extfile-client.cnf

11.生成签名证书

生成cert.pem,需要输入前面设置的密码docker

openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem \
-CAcreateserial -out cert.pem -extfile extfile-client.cnf

12.删除不需要的文件,两个证书签名请求

生成 cert.pem server-cert 之后。您可以安全地删除两个证书签名请求和扩展配置文件 :
rm -v client.csr server.csr extfile.cnf extfile-client.cnf

13.修改权限

要保护您的密钥免受意外损坏,请删除其写入权限。要使它们只能被您读取,更改文件模式
chmod -v 0400 ca-key.pem key.pem server-key.pem
证书可以是对外可读的,删除写入权限以防止意外损坏
chmod -v 0444 ca.pem server-cert.pem cert.pem

14.归集服务器证书

cp server-*.pem /etc/docker/
cp ca.pem /etc/docker/

15.修改Docker配置

使 Docker 守护程序仅接受来自提供 CA 信任的证书的客户端的连接
vim /lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd
替换为:
ExecStart=/usr/bin/dockerd --tlsverify --tlscacert=/usr/local/ca/ca.pem --
tlscert=/usr/local/ca/server-cert.pem --tlskey=/usr/local/ca/server-key.pem -H tcp://0.0.0.0:2375 -
H unix:///var/run/docker.sock

 

16重新加载daemon并重启docker

systemctl daemon-reload
systemctl restart docker

17.开放2375端口

/sbin/iptables -I INPUT -p tcp --dport 2375 -j ACCEPT

18,重启docker

systemctl restart docker

19.保存相关客户端的pem文件到本地

在本地计算机d盘下新建docker/ca目录,并用传输工具把Linux上的文件传到本地

 20.IDEA中配置

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

没有腰的嘟嘟嘟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值