入行三年,作为Java工程师,没写过博客就算了,连docker都不会的话就out了。这里将以docker为主题写我的第一篇博客,顺便学习了解一下docker
系统环境
VMware16 pro
Ubuntu 20.04.1 LTS
命令执行用户
root
1.更新软件包
apt update
2.添加新的https源:
apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
上面的地址可能会很慢,切换为以下地址
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
如果报“gpg: 找不到有效的 OpenPGP 数据”,则改执行下面的命令:
wget https://download.docker.com/linux/ubuntu/gpg
apt-key add gpg
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
上面的地址可能会很慢,切换为以下地址
add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
执行后再次更新apt源:
apt update
apt install docker-ce docker-ce-cli containerd.io
systemctl status docker
docker run hello-world
镜像:是一个只读模板,带有创建Docker容器的指令
容器:容器是用镜像创建的运行实例
镜像和容器的关系,就类似于Java中的类和类的实例的关系
docker images:列出本地所有的镜像信息
docker run [命令参数]:创建并启动一个容器
docker exec [命令参数]:进入容器
docker ps:列出正在运行的所有容器
docker ps -a:列出所有容器
docker stop [容器id]:停止正在运行的容器
docker start [容器id]:启动已经停止的容器
注:JavaWeb项目的运行环境一般是jdk、mysql、tomcat、redis等,我打算把这几个全部同一制作成一个镜像,实现一键部署。刚开始是打算通过写DockerFile的方式,结果发现无法实现。因此采用第二种办法,也就是在容器里面装好以上软件后,再打包成镜像
#拉取18.04版本的Ubuntu镜像
docker pull ubuntu:18.04
#启动Ubuntu容器并命名容器名称ubuntu1804
docker run -itd --name ubuntu1804 ubuntu:18.04
#进入容器
docker exec -it ubuntu1804 /bin/bash
编辑sources.list文件
vim /etc/apt/sources.list
在文件中把原来的源注释掉,再把下面的源加入到文件前面
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
更新源
apt-get update
apt-get upgrade
通过下面的官网连接下载相应版本
https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
#在宿主机执行以下命令,将jdk压缩包复制到容器内,路径自定义
docker cp jdk-8u261-linux-x64.tar.gz ubuntu1804:/usr/local/java
#在容器内cd到以下目录
cd /usr/local/java
#解压文件
tar -zxvf jdk-8u261-linux-x64.tar.gz
vim /etc/profile
在打开的文件末尾加入以下内容,注意jdk路径
#加入环境变量信息
export JAVA_HOME=/usr/local/java/jdk1.8.0_261
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:%{JAVA_HOME}/lib:%{JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
执行以下命令让配置文件立即生效
#让配置文件立即生效
source /etc/profile
输入以下命令确认java安装成功
java -version
一旦重启容器,那么输入java -version就会报错,所以这里需要把source /etc/profile命令加入~/.bashrc
vim ~/.bashrc
#在末尾加入以下内容
source /etc/profile
如果报权限问题,则执行以下命令
chmod 766 ~/.bashrc
https://tomcat.apache.org/download-80.cgi
tar -zxvf apache-tomcat-8.5.58.tar.gz
vim startup.sh
在文件末尾加上以下代码(注意替换JAVA_HOME和TOMCAT_HOME的路径)
#set java environment
export JAVA_HOME=/usr/local/java/jdk1.8.0_261
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:%{JAVA_HOME}/lib:%{JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
#tomcat
export TOMCAT_HOME=/usr/local/tomcat/apache-tomcat-8.5.58
dpkg -l | grep mysql
apt-cache madison mysql-server
apt install mysql-server
#先执行下面的命令判断MySQL是否启动
netstat -tap | grep mysql
#如果没有启动,进入/etc/init.d目录看看MySQL服务名称,执行下面的命令
service mysql start
#密码默认为空
mysql -uroot -p
#编辑~/.bashrc
vim ~/.bashrc
#将以下命令加入~/.bashrc文件末尾
service mysql start
#安装
apt install redis-server
#查看是否启动
netstat -tap | grep redis
#如果没有启动,进入/etc/init.d目录看看redis服务名称,执行下面的命令
service redis-server start
如果启动失败,输入以下命令查看日志
cat /var/log/redis/redis-server.log
vim /etc/redis/redis.conf
#将下面这一行注释掉
#bind 127.0.0.1 ::1
#以下命令可以登录redis客户端进行操作
redis-cli -h localhost -p 6379
设置容器启动后redis自启
#编辑~/.bashrc
vim ~/.bashrc
#将以下命令加入~/.bashrc文件末尾
service mysql start
docker commit 68e0d3c06b46 ubuntu1804_back:1.0
其中68e0d3c06b46表示正在运行的容器id
ubuntu1804_back:自定义镜像名
1.0:自定义版本
docker run -itd -p 8080:8080 -p 3306:3306 -p 6379:6379 ubuntu1804_back:1.0
注意这里的端口映射
docker exec -it [容器id] /bin/bash
注册dockerhub账号
#登录dockerhub
docker login
#如果push不规范,必须要改
docker tag 镜像id 用户名/镜像名
#推送
docker push 用户名/镜像名
我查看了一下我最终制作好的镜像大小,竟然达到1.19GB,这可能不是一个合格的镜像,不过尽管如此,我仍然明显地感觉到docker在分布式架构中的优势: