Ubuntu 20安装配置Docker

时间:2025-03-24 07:04:17

Ubuntu 20安装配置Docker

一、安装Docker

在终端中输入以下命令:

# 安装需要的包
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates software-properties-common curl
# 添加 GPG 密钥,并添加 Docker-ce 软件源
官方的软件源(不推荐,很慢):
curl -fsSL /linux/ubuntu/gpg|sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] /linux/ubuntu $(lsb_release -cs) stable"
中国科技大学的 Docker-ce 源(其他源类似):
curl -fsSL /docker-ce/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] /docker-ce/linux/ubuntu \
$(lsb_release -cs) stable"
# 注意:添加错了可以用以下命令删除
# 查询keyid,下图
sudo apt-key list
# keyid 就是90那一串
sudo apt-key del <keyid>
# 加参数-r可以移除
sudo add-apt-repository -r "deb [arch=amd64] /linux/ubuntu $(lsb_release -cs) stable"
# 更新软件包缓存
sudo apt-get update
# 安装 Docker-ce
sudo apt-get install docker-ce
# 启动Docker服务
sudo service docker start
# 测试运行
sudo docker run hello-world

二、Docker运行nginx

打开网易蜂巢镜像中心 https://c./hub#/m/home/

搜索nginx,可以看到有两个nginx,他们的名字和头上和图标都不一样,一个是鲸鱼,一个是两个球。

带有鲸鱼的镜像表示这个镜像是从官网的镜像中心复制过来的。这个镜像与docker的镜像是一摸一样的。我们使用此镜像。

# 拉取Docker
docker pull ./library/nginx:latest
# 查看Docker运行状态
docker images
# 在前台运行容器命令如下,输入后容器就会运行,按ctrl+c可以终止容器的运行。
docker run ./library/nginx
# 在后台运行容器:
docker run -d ./library/nginx
# 查看运行的容器:
docker ps
# 通过如下命令进入容器内部:
docker exec -it <容器ID> bash
-i保证我们的输入有效,即使在没有detach的情况下也能运行。
-t表示将分配给我们一个伪终端。我们将在伪终端输入我们的内容。
后面跟着的是容器的id,即我们上面用ps查询出来的id,这个id可以少写几位,它会自动识别。

三、Docker网络

网络介绍

上面我们只运行了nginx,并没有用浏览器进行访问,这里我们尝试用浏览器访问,但是之前我们要了解一下docker网络。

我们直到docker的隔离性,网络也是个隔离性的一部分,linux使用了命名空间来进行资源的隔离,比如pid namespace就是用来隔离进程的,mount namespace是用来隔离文件系统的,network namespace 是用来隔离网络的。每一个network namespace都提供了一个独立的网络环境,包括网卡路由iptable规则等等,都是与以其它的network space隔离的。

容器在默认情况下,一般会分配一个独立的network-namespace,也就是网络类型中的Bridge模式。在使用Bridge时就涉及到了一个问题,既然它有独立的namesapce,这就需要一种技术使容器内的端口可以在主机*问到,这种技术就是端口映射,docker可以指定你想把容器内的某一个端口可以在容器所在主机上的某一个端口它俩之间做一个映射,当你在访问主机上的端口时,其实就是访问容器里面的端口。

2.还有一种类型是Host模式,如果在启动容器的时候指定使用Host模式,那么这个容器将不会获得一个独立的network namespace,而是和主机共同使用一个,这个时候容器将不会虚拟出自己的网卡,配置出自己的ip。而是使用宿主机上的ip和端口。也就是说在docker上使用网络和在主机上使用网络是一样的。

3.还有一种网络类型是None。也就是没有网络,这种情况docker将不会和外界的任何东西进行通讯。

实际访问端口

刚才我们在运行nginx镜像的时候并没有指定端口映射,所以我们这里停掉nginx容器。

docker stop containerId
# 在后台运行,开放主机8080端口映射到容器的80端口上。
#  -p(小写)是开放一个容器的端口到主机上
docker run -d -p 8080:80 ./library/nginx
# 查看主机8080端口是否开启,是开启的那么访问 主机ip:8080 即可访问到nginx。
netstat -na |grep 8080
#  -P(大写)是开放容器所有的端口到主机上一个随机的端口,可以看到随机给我的端口是32768,然后用 ip:32768去访问即可访问到nginx
docker run -d -P ./library/nginx

四、Docker部署Java Web应用

我们还需要学习Dockerfile,它告诉docker我们怎样制作我们的镜像,我们镜像的每一步操作分别是什么,写好Dockerfile后我们使用docker build命令执行Dockerfile里面的每一件事情。最终会把Dockerfile构建出来。

在这里因为是做一个演示,所以我们使用了一个开源的java web应用Jpress。

下载Jpress

 git clone /JPressProjects/

配置Dockerfile文件

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

mkdir Dockerfile
from ./library/tomcat
maintainer  zhang20182937  sdzybq@
COPY  /usr/local/tomcat/webapps

首先我们的镜像是要运行在tomcat中的,所以填写 from tomcat,以tomcat为基础。maintainer是所有者的意思。因为war包是要放在webapps中的,所以我们使用copy命令复制到tomcat的webapps。每个容器都包含一个自己的系统,所以这里的/usr/local/tomcat/webapps指的是tomcat容器中的位置,那么哪里指定是tomcat容器呢?就是在一开始的from指定的。

# 使用当前目录的 Dockerfile 创建镜像,标签为 runoob/ubuntu:v1。
docker build -t runoob/ubuntu:v1 . 
# 使用URL /creack/docker-firefox 的 Dockerfile 创建镜像。
docker build /creack/docker-firefox
# 也可以通过 -f Dockerfile 文件的位置:
docker build -f /path/to/a/Dockerfile .