docker容器学习-------内容本人在linux服务器上操作过,现整理完整的流程记录一下学习过程
1、安装最新版的yum:
(1)检查系统自带的yum包
rpm -qa |grep yum
(2)删除rpm包
rpm -qa|grep yum|xargs rpm -e --nodeps
(3)去http://mirrors.163.com/centos/7/os/x86_64/Packages/下载如下rpm文件
yum-3.4.3-163.el7.centos.noarch.rpm
yum-metadata-parser-1.1.4-10.el7.x86_64.rpm
yum-plugin-fastestmirror-1.1.31-52.el7.noarch.rpm
python-inotify-0.9.4-4.el7.noarch.rpm
(4)用rpm命令安装
rpm -ivh --force --nodeps yum-3.4.3-163.el7.centos.noarch.rpm
rpm -ivh --force --nodeps yum-metadata-parser-1.1.4-10.el7.x86_64.rpm
rpm -ivh --force --nodeps yum-plugin-fastestmirror-1.1.31-52.el7.noarch.rpm
rpm -ivh --force --nodeps python-inotify-0.9.4-4.el7.noarch.rpm
(5)修改来源文件
cd /etc/yum.repos.d
备份CentOS-Base.repo文件为CentOS-Base.repo_bak
mv CentOS-Base.repo CentOS-Base.repo_bak
下载对应版本repo文件,我下载的是Centos-7.repo,修改Centos-7.repo名称为CentOS-Base.repo
wget http://mirrors.aliyun.com/repo
mv Centos-7.repo CentOS-Base.repo
(5)清除系统默认配置的yum源
yum clean all
(7)运行makecache生成缓存
yum makecache
(8)更新yum文件
yum update
2、docker容器安装:
(1)查看是否安装了docker
yum list installed | grep docker
(2)安装docker
yum -y install docker
(3)docker启动/停止/重启/查看状态
systemtcl start docker
systemtcl stop docker
systemtcl restart docker
systemtcl status docker
3、docker离线安装
(1)下载安装包
wget https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz
(2)解压
tar -zxvf docker-18.06.3-ce.tgz
(3)将解压的docker文件夹下的文件复制到/usr/bin/路径下
cp docker/* /usr/bin/
(4)在/etc/systemd/system/目录下新增docker.service文件,这样可以将docker注册为service服务,具体内容如下
#####################################################
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd --selinux-enabled=false --insecure-registry=127.0.0.1
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
#####################################################
上面文件内容中的--insecure-registry=127.0.0.1改成私服的ip
(5)给docker.service文件添加执行权限
chmod +x docker.service
(6)重新加载配置文件(每次修改docker.service文件时都需要重新加载)
systemctl daemon-reload
(7)修改或新增 /etc/docker/daemon.json,文件内容如下:
{
"registry-mirrors": ["https://registry.docker-cn.com","http://hub-mirror.c.163.com"]
}
(8)启动,查看状态
systemctl start docker
systemctl status docker
(9)设置开机启动
systemctl enable docker.service
4、测试jar包在docker中运行
(1)查看docker客户端和服务段是否都开启
docker version
(2)拉取hello-world镜像测试
docker pull hello-world
(3)查看是否存在hello-world镜像
docker images
(4)运行hello-world
docker run hello-world --cmd窗口运行
docker run -d hello-world --后台运行
(5)查看容器日志
docker logs [OPTIONS] CONTAINERID
Options:
--details 显示更多的信息
-f, --follow 跟踪实时日志
--since string 显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟)
--tail string 从日志末尾显示多少行日志, 默认是all
-t, --timestamps 显示时间戳
--until string 显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟)
例如:docker logs --since 30m 0eef327f000a
(6)查看containerId
docker ps -a
5、项目打包成镜像在docker中运行
(1)项目正常打成jar包,创建Dockerfile文件,内容如下
FROM java:8
ADD DockerDemo-0.0.1-SNAPSHOT.jar app.jar
EXPOSE 8084
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
参数详解:
FROM:表示基础镜像,即运行环境;
ADD:拷贝文件并且重命名;
EXPOSE:并不是真正的发布端口,这个只是容器部署人员与建立image的人员之间的交流,即建立image的人员告诉容器布署人员容器应该映射哪个端口给外界;
ENTRYPOINT:容器启动时运行的命令,相当于我们在命令行中输入java -jar xxxx.jar,为了缩短 Tomcat 的启动时间,添加java.security.egd的系统属性指向/dev/urandom作为 ENTRYPOINT;
(2)服务器上创建docker文件夹,将jar包和Dockerfile移至该文件夹,运行命令:
docker build -t docker-demo . (docker-demo为镜像名称,想取啥名就取啥名)
(3)查看是否构建成一个image
docker images
(4)运行镜像
docker run -p 8084:8084 -d docker-demo
-p表示端口映射,冒号左边为docker容器外的端口号,右边为容器内的端口号
-d表示后台运行
(5)查看运行的镜像
docker ps -a
(6)查看容器日志
docker logs [OPTIONS] CONTAINERID
Options:
--details 显示更多的信息
-f, --follow 跟踪实时日志
--since string 显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟)
--tail string 从日志末尾显示多少行日志, 默认是all
-t, --timestamps 显示时间戳
--until string 显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟)
例如:docker logs --since 30m 0eef327f000a
其他命令:
删除容器,需要停止容器
docker ps -a 命令查询containerid
根据containerid停止容器
docker stop containerid(也可只输入containerid的前几位)
删除容器
docker rm containerid(也可只输入containerid的前几位)
删除镜像(前提是该镜像的容器都已停止或者删除)
docker images查看imageid
docker rmi imageid(需要全部ID名)