Docker 基础

  • 概念

Docker 优势:持续集成、版本控制、可移植性、隔离性。
Docker容器通过相关配置,保持容器内部所有的配置和依赖关系始终不变。最终,你可以在开发到产品发布的整个过程中使用相同的容器来确保没有任何差异或者人工干预。
Docker可以确保你的应用程序与资源是分隔开的。
Docker容器可以在不同的开发与产品发布生命周期中确保一致性,进而标准化你的环境。
Docker可以轻松地回滚到这个镜像的前一个版本。

参考:www.dockone.io/article/389

  • Docker 环境安装

1. 版本检查,Docker 要求 CentOS 系统的内核版本高于 3.10
uname -r
2. 更新yum
yum update
3. 卸载老版本
yum remove docker docker-common docker-selinux docker-engine
4. 查看yum仓库,查看是否有docker
ll /etc/yum.repos.d/
5. 安装软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
yum install -y yum-utils device-mapper-persistent-data lvm2
6. 安装仓库
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
7. 查看docker版本
yum list docker-ce --showduplicates | sort -r
8. 安装docker
yum install docker-ce
9. 启动docker
systemctl start docker
10. 验证安装
dokcer run hello-world
复制代码
  • Docker 常用镜像命令

docker images : 列出镜像
docker search : 搜索镜像 ,exp -> docker search nginx
docker pull : 下载镜像 ,exp -> docker pull nginx
docker rmi : 搜索镜像 ,exp -> docker rmi nginx
docker build : 通过Dockerfile构建镜像
复制代码
  • Docker 常用容器命令

docker ps : 列出容器
docker run : 启动容器 
docker stop : 停止容器
docker restart : 重启容器
docker exec -it : 进入容器,exp -> docker exec -it 9A12345ea980 /bin/bash
docker rm : 删除容器
docker cp : 用于容器与宿主机之间进行数据拷贝,exp -> docker cp 9A12345ea980: /etc/nginx/nginx.conf /dockerData/nginx/conf/nginx.conf
复制代码
  • DockerFile

Dockerfile文件为一个文本文件,里面包含构建镜像所需的所有命令

  • 操作示例

后续部署环境在linux,所以演示环境linux centos 8,不在本地mac。
docker 启动一个ng容器exp:

1. docker run -d -p 8080:80 --name nginx --rm nginx
2. docker ps
3. docker exec -it 9A12345ea980 /bin/bash
4. docker cp nginx:/etc/nginx/nginx.conf /dockerData/nginx/conf/nginx.conf
5. docker cp nginx:/etc/nginx/conf.d /dockerData/nginx/conf/conf.d
6. docker stop 9A12345ea980
7. docker run -d -p 8080:80 --name nginx \
		-v /dockerData/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
		-v /dockerData/nginx/conf/conf.d:/etc/nginx/conf.d \
		-v /dockerData/nginx/www:/usr/share/nginx/html \
		-v /dockerData/nginx/logs:/var/log/nginx nginx
8. mkdir -p /dockerData/nginx/www
9. cd /dockerData/nginx/www
10. vi index.html
        Nginx docker test !
11. curl http://localhost:8080
复制代码

编写Dockerfile,启动容器exp:

1. 本地mac idea打好的包拷贝到linux
scp /Users/XXXXXX/Documents/work/project/satan-life/life-customer/target/life-customer-0.0.1-SNAPSHOT.jar root@XXX.XXX.XXX.XXX:/satan/apps
2. 编写Dockerfile
cd /satan/apps & vim Dockerfile
FROM williamyeh/java8:latest
VOLUME /tmp
EXPOSE 8080
COPY life-customer-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
3. 基于Dockerfile构建镜像
docker build -t life-customer:v0.0.1 .
4. 基于镜像启动容器
docker run -v /app/docker/logs:/logs -p 80:8071 --rm --name customer ife-customer:v0.0.1
5. 验证
curl -d '{}' -H 'Content-Type: application/json' -X POST http://localhost/customer/info/basic
6. 附日志
[root@iZ8vb40udrt3ez7ccxgoqqZ apps]# docker build -t life-customer:v0.0.1 .
Sending build context to Docker daemon   28.5MB
Step 1/5 : FROM williamyeh/java8:latest
 ---> 00bc163fa009
Step 2/5 : VOLUME /tmp
 ---> Running in a13fab7f0f6f
Removing intermediate container a13fab7f0f6f
 ---> a5fb91cf6eb9
Step 3/5 : EXPOSE 8080
 ---> Running in c1e255ce1faf
Removing intermediate container c1e255ce1faf
 ---> 67235ff31797
Step 4/5 : COPY life-customer-0.0.1-SNAPSHOT.jar app.jar
 ---> 59617cb57b87
Step 5/5 : ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
 ---> Running in bcda4a2c1153
Removing intermediate container bcda4a2c1153
 ---> f9f3a39fd119
Successfully built f9f3a39fd119
Successfully tagged life-customer:v0.0.1
[root@iZ8vb40udrt3ez7ccxgoqqZ apps]# docker images
REPOSITORY         TAG       IMAGE ID       CREATED          SIZE
life-customer      v0.0.1    f9f3a39fd119   12 seconds ago   622MB
nginx              latest    4cdc5dd7eaad   3 days ago       133MB
hello-world        latest    d1165f221234   4 months ago     13.3kB
williamyeh/java8   latest    00bc163fa009   3 years ago      593MB
[root@iZ8vb40udrt3ez7ccxgoqqZ apps]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@iZ8vb40udrt3ez7ccxgoqqZ apps]# docker run -v /app/docker/logs:/logs -p 80:8071 --rm --name customer ife-customer:v0.0.1
Unable to find image 'ife-customer:v0.0.1' locally
docker: Error response from daemon: Head https://registry-1.docker.io/v2/library/ife-customer/manifests/v0.0.1: read tcp 172.19.80.210:57156->35.175.91.243:443: read: connection reset by peer.
See 'docker run --help'.
[root@iZ8vb40udrt3ez7ccxgoqqZ apps]# docker run -v /app/docker/logs:/logs -p 80:8071 --rm --name customer life-customer:v0.0.1

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v2.4.8)

2021-07-10 05:58:01,901 [main][] INFO  [com.satan.customer.CustomerApplication] [StartupInfoLogger.java:55] - Starting CustomerApplication v0.0.1-SNAPSHOT using Java 1.8.0_161 on 18671fc0499f with PID 1 (/app.jar started by root in /)
2021-07-10 05:58:01,911 [main][] INFO  [com.satan.customer.CustomerApplication] [SpringApplication.java:664] - No active profile set, falling back to default profiles: default
2021-07-10 05:58:03,070 [main][] INFO  [org.springframework.cloud.context.scope.GenericScope] [GenericScope.java:288] - BeanFactory id=0406820a-c994-37f7-8001-8ea7c867386d
2021-07-10 05:58:03,475 [main][] INFO  [org.springframework.boot.web.embedded.tomcat.TomcatWebServer] [TomcatWebServer.java:108] - Tomcat initialized with port(s): 8071 (http)
2021-07-10 05:58:03,498 [main][] INFO  [org.apache.coyote.http11.Http11NioProtocol] [DirectJDKLog.java:173] - Initializing ProtocolHandler ["http-nio-8071"]
2021-07-10 05:58:03,500 [main][] INFO  [org.apache.catalina.core.StandardService] [DirectJDKLog.java:173] - Starting service [Tomcat]
2021-07-10 05:58:03,500 [main][] INFO  [org.apache.catalina.core.StandardEngine] [DirectJDKLog.java:173] - Starting Servlet engine: [Apache Tomcat/9.0.48]
2021-07-10 05:58:03,573 [main][] INFO  [org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/]] [DirectJDKLog.java:173] - Initializing Spring embedded WebApplicationContext
2021-07-10 05:58:03,573 [main][] INFO  [org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext] [ServletWebServerApplicationContext.java:289] - Root WebApplicationContext: initialization completed in 1527 ms
2021-07-10 05:58:04,522 [main][] INFO  [org.apache.coyote.http11.Http11NioProtocol] [DirectJDKLog.java:173] - Starting ProtocolHandler ["http-nio-8071"]
2021-07-10 05:58:04,551 [main][] INFO  [org.springframework.boot.web.embedded.tomcat.TomcatWebServer] [TomcatWebServer.java:220] - Tomcat started on port(s): 8071 (http) with context path ''
2021-07-10 05:58:04,586 [main][] INFO  [com.alibaba.cloud.nacos.registry.NacosServiceRegistry] [NacosServiceRegistry.java:75] - nacos registry, DEFAULT_GROUP life-customer 172.17.0.2:8071 register finished
2021-07-10 05:58:04,603 [main][] INFO  [com.satan.customer.CustomerApplication] [StartupInfoLogger.java:61] - Started CustomerApplication in 3.61 seconds (JVM running for 4.755)

[root@iZ8vb40udrt3ez7ccxgoqqZ ~]# docker ps
CONTAINER ID   IMAGE                  COMMAND                  CREATED         STATUS         PORTS                                             NAMES
18671fc0499f   life-customer:v0.0.1   "java -Djava.securit…"   6 minutes ago   Up 6 minutes   8080/tcp, 0.0.0.0:80->8071/tcp, :::80->8071/tcp   customer
[root@iZ8vb40udrt3ez7ccxgoqqZ ~]# curl -d '{}' -H 'Content-Type: application/json' -X POST http://localhost/customer/info/basic
{"code":"00","msg":"ok","data":{"name":"satan","customerId":null}}[root@iZ8vb40udrt3ez7ccxgoqqZ ~]# 
复制代码
  • 参考资料

www.dockone.io/article/389

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享