Docker 的基本命令

146 阅读3分钟

安装

     开机自动启动
     systemctl enable docker.service
     systemctl start docker
     阿里云源配置
     https://cr.console.aliyun.com/cn-shenzhen/instances/mirrors
     # 安装 Docker Compose
     https://docs.docker.com/compose/install/
     配置IDEA CA 参考
     https://docs.docker.com/engine/security/protect-access/
     https://blog.csdn.net/qq_40250122/article/details/98893559
     配置Portainer
     docker search portainer
     docker pull portainer/portainer
     docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock --restart=always --name prtainer portainer/portainer

镜像命令

docker images 
docker rmi ID 
docker pull redis []

容器命令

docker ps -a 
docker -f rm
docker stop $(docker ps -a -q) 停止所有
docker run -d --name tomcat-8082 -p 8082:8080 --rm  tomcat
docker stop ID
docker start tomcat 容器的启动
docker rm $(docker ps -a -q) 删除所有容器

docker容器拷贝Linux系统中
docker cp tomcat-8080:/usr/local/tomcat/webapps/ROOT/index.html /root
Linux系统拷贝到docker容器中
docker cp index.html tomcat-8080:/usr/local/tomcat/webapps/ROOT 
日志查看
docker logs --tail=10 tomcat-8080
数据卷
docker logs -f -t --since="2021-10-19" --tail=10 tomcat-8080
docker run -d --name tomcat-8080 -p 8080:8080 -v /root/docker-volumn/exam:/usr/local/tomcat/webapps/exam
docker cp nginx-test:/etc/nginx/nginx.conf  /usr/local/nginx/conf
启动nginx
docker run --name nginx-test -p 80:80 -d nginx
docker exec -it nginx-test bash
docker restart nginx-test
grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
flush privileges;
mysql -uroot -p
## Dockerfile 命令
FROM 依赖于什么镜像
ENV 环境配置
MAINTAINER 作者信息
WORKDIR 两个目录跳转 类似cd 
RUN 创建文件夹 shell脚本
EXPOSE 为容器打开端口
COPY 宿主机复制到docker中
docker build -t deom1 .
删除虚悬镜像
docker image prune
开启docker远程访问
vi /lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
systemctl daemon-reload
service docker restart
curl http://localhost:2375/version

防火墙

firewall-cmd --state 防火墙的状态
firewall-cmd --list-ports 防火墙的端口
systemctl start firewalld.service 启动防火墙
systemctl stop firewalld.service 关闭防火墙
systemctl restart firewalld.service 重启防火墙
systemctl is-enabled firewalld.service;echo $?
enabled             --自启
0
或者:
[root@localhost ~]# systemctl is-enabled firewalld.service;echo $?
disabled                --不自启
1
firewall-cmd --zone=public --list-ports 16. 查看指定区域所有打开的端口
在指定区域打开端口(记得重启防火墙)\(永久生效再加上 --permanent)
firewall-cmd --zone=public --add-port=80/tcp --permanent
–zone 作用域
–add-port=8080/tcp 添加端口,格式为:端口/通讯协议
–permanent #永久生效,没有此参数重启后失效

1、firwall-cmd:是Linux提供的操作firewall的一个工具;
2--permanent:表示设置为持久;
3--add-port:标识添加的端口;
firewall-cmd --zone=public --add-port=8080/tcp --permanent

docker maven 配置一键部署

<properties>
    <java.version>1.8</java.version>
    <!-- 镜像 前缀姓名-->
    <docker.image.prefix>demo</docker.image.prefix>
</properties>

 <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
      	.....................
</dependencies>

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>1.0.0</version>

                <configuration>
                    <!-- 镜像名称  guoweixin/exam-->
                    <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
                    <!--指定标签-->
                    <imageTags>
                        <imageTag>latest</imageTag>
                    </imageTags>
                    <!-- 基础镜像jdk 1.8-->
                    <baseImage>java</baseImage>
                    <!-- 制作者提供本人信息 -->
                    <maintainer>guoweixin guoweixin@aliyun.com</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地址
						此处未加CA加密认证。
					-->
                    <dockerHost>http://192.168.20.135: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>

                <!--当执行mvn package 时,执行: mvn clean package docker:build -->
                <executions>
                    <execution>
                        <id>build-image</id>
                        <phase>package</phase>
                        <goals>
                            <goal>build</goal>
                        </goals>
                    </execution>
                </executions>

            </plugin>

        </plugins>
    </build>

当我们执行mvn package时,执行 build、tag 操作,
当执行mvn deploy时,执行build、tag、push 操作。
如果我们想跳过 docker 某个过程时,只需要:
-DskipDockerBuild 跳过 build 镜像
-DskipDockerTag 跳过 tag 镜像
-DskipDockerPush 跳过 push 镜像
-DskipDocker 跳过整个阶段
例如:我们想执行 package 时,跳过 tag 过程,那么就需要mvn package -DskipDockerTag

相关配置说明

  • executions.execution.phase:此处配置了在maven打包应用时构建docker镜像;
  • imageName:用于指定镜像名称,mall-tiny是仓库名称,{project.version}为仓库名称;
  • dockerHost:打包后上传到的docker服务器地址;
  • baseImage:该应用所依赖的基础镜像,此处为java;
  • entryPoint:docker容器启动时执行的命令;
  • resources.resource.targetPath:将打包后的资源文件复制到该目录;
  • resources.resource.directory:需要复制的文件所在目录,maven打包的应用jar包保存在target目录下面;
  • resources.resource.include:需要复制的文件,打包好的应用jar包。