《Docker学习系列之一》Ubuntu18.10上Docker的安装

Ubuntu18.10上Docker的安装及简单使用

参考该博客: 博客地址

Docker安装

1> 卸载可能存在旧版本的docker:

sudo apt-get remove docker docker-engine docker-ce docker.io

2> 更新apt包索引:

sudo apt-get update

为了使apt可以通过https使用Repository,先安装以下包:

sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common

添加Docker官方GPG密钥:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

检查GPG Key信息是否正确:

sudo apt-key fingerprint 0EBFCD88

GPG Key信息如下:
在这里插入图片描述
3> 添加源信息:

# 将源信息直接写入/etc/apt/sources.list
$ sudo add-apt-repository \
    "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
    $(lsb_release -cs) \
    stable"

或者:

#单独创建docker的source.list
$ sudo bash -c "deb [arch=amd64] https://download.docker.com/linux/ubuntu trusty stable > /etc/apt/sources.list.d/docker.list"

再更新下apt包索引:

sudo apt-get update

确认Docker的源信息是否正确, 新的源是否添加成功:

sudo apt-cache madison docker-ce

在这里插入图片描述
4> 安装最新版本的Docker CE:

sudo apt-get install -y docker-ce

Docker安装验证

1> 查看Docker安装版本详细信息:

1. 查看docker安装版本详细信息
  sudo docker version
2. 查看docker是否启动
  sudo systemctl status docker
3. 如果docker未启动,则启动docker
  sudo systemctl start docker
4. 重启docker
  sudo systemctl restart docker

Docker容器常用命令

1. 新建并启动容器
  docker run
2. 列出本地容器
  docker ps
3. 停止容器
  docker stop [dockerid]
4. 强制停止容器
  docker kill [dockerid]
5. 启动已停止的容器
  docker start [dockerid]
6. 重启容器
  docker restart [dockerid]
7. 进入容器
  docker exec -it [dockename|dockerid] /bin/bash
8. 删除已经停止的容器
  docker rm [dockerid]
  强制删除
  docker rm -f [dockerid]
9. 删除所有容器
  docker rm -f $(docker ps -a -q) 

Docker镜像常用命令

1. 搜索镜像
  sudo docker search java
2. 下载镜像
  sudo docker pull java
3. 列出本地镜像
  docker images
4. 删除本地镜像
  sudo docker rmi hello-world
  删除所有镜像(-f表示强制删除)
  sudo docker rmi -f $(dokcer images)

Docker中部署web应用

我目前写的多的还是web应用。我把应用打成了一个jar包views-0.0.1-SNAPSHOT.jar。放在了/myapps/jar/路径下。
我的应用配置如下:

server:
  port: 8010
  servlet:
    context-path: /views

1> 首先需要下载web应用环境所需要的镜像文件(主要是jdk)
执行以下命令:

sudo docker search jdk

可以查找镜像文件:
在这里插入图片描述
执行sudo docker pull codenvy/jdk8_maven3_tomcat8 我将codenvy/jdk8_maven3_tomcat8给拉下来作为使用。
2> 镜像下载速度慢,可以去 阿里云 获取一个加速器地址来加速,使用之后速度快了很很多。获取到地址之后,配置镜像加速器并重启docker:

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://8mzixu81.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

3> 在/myapps文件夹下,新建了一个dockerfile,内容如下:

FROM codenvy/jdk8_maven3_tomcat8
MAINTAINER gxz
COPY jar/views-0.0.1-SNAPSHOT.jar /app.jar
CMD java -jar /app.jar
#  设置对外端口为 8090
EXPOSE 8090

在/myapps路径下,通过dockerfile 文件生成本工程的镜像:

# 构建镜像,-t :给镜像取名为 gentle
docker build -t views . 

此行命令最后有一个点,表示使用当前上下文中的 dockerfile 文件。
docker images 查看已有镜像,可以看到镜像已经构建好了。
4> 通过镜像启动容器,命令如下:

 
#  -d 后台运行、
#  最后一个 views 是引用的镜像的名字、
#  --name jy_views 给容器取名为 jy_views (取名参数前面是两短横线)、
#  -p 8090:8010 端口映射,注意是小写 p 
# 前一个 8090 是对外浏览器上访问的端口,后一个 8010 是容器内工程本身的端口,两者可不一样
 
docker run -d -p 8090:8010 --name jy_views views

5> docker ps -a :查看当前服务器上所有容器。
6> 可以在浏览器中访问http://localhost:8090/views可以看到已经成功部署应用。

附上一个别人的dockerfile文件及详细说明

参看 这篇博客

FROM frolvlad/alpine-oraclejdk8
VOLUME /usr/test
ADD test.jar app.jar
EXPOSE 8001
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

FROM:
Docker是基于镜像的部署,幸运的是Docker官方和开发者们为我们维护了许多高质量的Docker镜像,而基于这些镜像我们能做出符合自己需求的镜像。此处的FROM意思为我们即将要创建的镜像的基础镜像的名字,这个名字可以是我们本地已有的镜像,也可以是Docker Hub上的镜像,如果是Docker Hub上的镜像,此时docker daemon会为我们自动下载该镜像。还有一个要注意的点,如果是本地镜像要加上版本(镜像名:版本号),否则默认版本号为latest。

VOLUME:
Docker的运行相当于是操作系统的一个进程,但是该进程又与普通进程有些许不同,因为该进程内部维护着的是我们的一个微服务的完整结构,而往往项目中需要运行的微服务都有记录日志或者其他写出文件的功能。设想一下这样的情况:我们的微服务现在正在运行,但是访问量突然增大,开发人员又没有关注到这一点,没有进行水平扩展,这时候很有可能这个微服务就down了,而这个微服务一旦down了之后,出现的情况就是整个容器的status就变成了Exited,而此时如果将容器删除,容器中的所有数据卷会跟随容器一起删除,因为这些数据卷是临时的。此处的映射路径为/usr/test。这是我们自定义的映射路径,后续要演示记录日志的功能。当然也可以指定/tmp 其效果都是在主机的/var/lib/docker/volumes目录下创建一个临时文件,并链接到容器的链接路径。而为什么链接到容器的/tmp目录呢?因为 Spring Boot 使用的内嵌 Tomcat 容器默认使用/tmp作为工作目录。当然此处的/tmp也可以变成你的日志记录文件夹,这样就可以在本地实时查看日志记录了。

ADD:
将我们自身的项目admin.jar作为app.jar加入到容器中。

EXPORT:
该命令用于声明在运行时容器提供服务的端口。注意:这只是一个声明,运行时并不会因为该声明就打开相应的端口。该指令的作用是帮助镜像使用者理解该镜像服务的守护端口;其次是当运行时使用随机映射时(即run命令的-P参数),会自动映射EXPORT的端口。

ENTRYPOINT:
该命令制定Docker容器启动时执行的命令,可多次设置,但只有最后一条会生效。
[“java”,"-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]这条命令中可能部分读者会对 -Djava.security.egd=file:/dev/./urandom 这条命令有疑惑,这是因为linux中和windows中取随机数时的参考策略不同,linux默认的随机数会被取完,导致返回-1。而制定/dev/./urandom这个取随机数的策略时,当随机数取完之后会返回伪随机数,不至于影响业务。

猜你喜欢

转载自blog.csdn.net/weixin_42273782/article/details/88942204