文章目录
1 离线安装docker(需要root权限)
1.1 安装过程
参考:《官方安装介绍》 https://docs.docker.com/install/linux/docker-ce/binaries/#install-static-binaries
参考:《Centos7 安装docker-18.03.1-ce(离线安装)》 https://blog.csdn.net/corbin_zhang/article/details/81325114
直接上网址:
Install Docker CE from binaries (官方文档:通过二进制包安装 docker 社区版)
简单介绍下安装步骤:
- 通过 FileZilla 等文件传输工具将 docker-18.03.1-ce.tar 放到用户目录下,并移动到该目录执行下述命令解压二进制包
$ tar xzvf docker-18.03.1-ce.tar
- 将解压出来的 docker 文件所有内容移动到
/usr/bin/
目录下
$ sudo cp docker/* /usr/bin/
1.2 docker注册为service(需要root)
参考:《Linux下离线安装Docker》 https://www.cnblogs.com/luosteel/p/10038954.html
关闭se :sudo setenforce 0
并将以下文件放入 /etc/systemd/system/docker.service 中,就可使用service docker restart/stop 等操作来启停docker
vim /etc/systemd/system/docker.service
按i
进入书写模式,填入下列文字:
[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
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
- 启动服务
chmod +x /etc/systemd/system/docker.service #添加文件权限并启动docker
systemctl daemon-reload
#重载unit配置文件
systemctl start docker
#启动Docker
systemctl enable docker.service
#设置开机自启
- 验证是否成功
systemctl status docker
#查看Docker状态
docker -v #查看Docker版本
如果报错,尝试
sudo rm /var/lib/docker/aufs -rf
现在你可以尝试着打印下版本号,试着看看 images,看看 info,看看容器了
$ sudo docker images
$ sudo docker ps -a
$ sudo docker --version
$ sudo docker info
都没有问题,则表示安装成功:)
至此,完美撒花!!!
1.3 改为普通用可以使用docker
默认情况下,docker 命令会使用 Unix socket 与 Docker 引擎通讯。而只有 root 用户和 docker 组的用户才可以访问 Docker 引擎的 Unix socket。出于安全考虑,一般 Linux 系统上不会直接使用 root 用户。因此,更好地做法是将需要使用 docker 的用户加入 docker 用户组。
- 添加 docker group :
sudo groupadd docker
- 将用户加入该 group 内
sudo gpasswd -a ${USER} docker
- 使用chgrp命令更改文件所属用户组
chgrp docker /var/run/docker.sock
- 重启服务
sudo service docker restart
- 切换一下用户组(刷新缓存)
newgrp - docker;
newgrp - `groups ${USER} | cut -d' ' -f1`; # TODO:必须逐行执行,不知道为什么,批量执行时第二条不会生效
# 或者,注销并重新登录
pkill X
现在可以用普通用户试用一下docker了:
docker images
1.4 干净卸载docker
rm -rf /etc/systemd/system/docker.service.d
13
rm -rf /var/lib/docker
rm -rf /var/run/docker
rm -rf /var/run/docker.pid
2 把image(镜像)在离线环境下安装
由于 image文件只能通过docker pull
命令获取,所以必须有一个服务器能够上网。
然后把下下来的镜像考到离线服务器。
2.1 有网的环境 安装docer
参考:《CentOS 7 下 yum 安装 Docker CE》 https://qizhanming.com/blog/2019/01/25/how-to-install-docker-ce-on-centos-7
- 首先最好 把 yum 源设置为国内的镜像。
# 1、首先备份系统自带yum源配置文件/etc/yum.repos.d/CentOS-Base.repo
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
# 2、下载ailiyun的yum源配置文件到/etc/yum.repos.d/
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 3、运行yum makecache生成缓存
yum makecache
# 4、更新系统
yum -y update
- 为了方便添加软件源,支持 devicemapper 存储类型,安装如下软件包
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
- 安装 Docker
sudo yum update
sudo yum install docker-ce
- 启动 Docker服务
# 如果想添加到开机启动
sudo systemctl enable docker
# 启动 docker 服务
sudo systemctl start docker
- 是普通用户有权限使用docker
加入 docker 用户组命令
sudo usermod -aG docker USER_NAME
更改文件权限:参见本文 1.3
- 验证是否安装:
docker images
2.2 离线下载镜像 并 打包
参考:《离线环境获取Docker镜像》 https://my.oschina.net/u/3446722/blog/988807
一般在公司我们面临这样的问题:
- 有服务器node01、node02
- 其中 node01可以访问外网,node02不能访问外网,但node01与node02之间是互通的
- 在node01上,从远程仓库获取
hello-world
镜像
docker pull hello-world
- 查看下载好的镜像
docker images
# 显示如下信息:
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest fce289e99eb9 10 months ago 1.84kB
- 将
hello-world
镜像保存成 tar 归档文件
docker save -o hello-world-image.tar xxx/hello-world
# 其中docker save : 将指定镜像保存成 tar 归档文件。 -o :输出到的文件。
-
将保存好的
hello-world-image.tar
上传至服务器node02上 -
登录node02,使用离线安装好的docker加载
hello-world-image.tar
# docker load : 加载指定的tar归档文件格式的镜像。-i :指定要读取的tar归档文件格式的镜像。
docker load -i oracle-12c.tar
hello-world
镜像加载完成,查看
docker images
2.3 自己配置好的容器 打包成镜像
当在有网的环境中装好docker,下载好镜像image,并运行成了容器。
有的时候,会在容器中做一些更改,并希望把这些修改保存下来, 直接拷贝到别的机器去运行即可。需要进行以下操作:
docker commit -a "xqtbox" -m "vearchv0.3 created a ShangHu id_card Db" cid12312312 xqtbox/vearch:0.3
# OPTIONS说明:
-a :提交的镜像作者;
-m :提交时的说明文字;
-c :使用Dockerfile指令来创建镜像;
-p :在commit时,将容器暂停。
后面再运行2.2 的方法 保存到本地
3 常用docker命令
参考:《Docker 常用命令与操作》
https://www.jianshu.com/p/adaa34795e64
镜像操作:
- 查看所有的镜像
docker images
- 创建容器️️️:
# 创建并启动一个容器 名为 test 使用镜像daocloud.io/library/ubuntu
docker run -id --name test daocloud.io/library/ubuntu
## --name 命名 eg: --name=ubuntu_server
## -i, --interactive=false, 打开STDIN,用于控制台交互
## -d, --detach=false, 指定容器运行于前台还是后台,默认为false
## -v, --volume=[], 给容器挂载存储卷,挂载到容器的某个目录。eg: -v /etc/aac:/var/aac (: 之前是宿主机文件夹,之后是容器需共享的文件夹)
## -p, --publish=[], 指定容器暴露的端口,eg: -p 80:80
## --net="bridge", 容器网络设置:bridge 使用docker daemon指定的网桥; host //容器使用主机的网络(做实验)
## 注意:这一步非常重要,这一步错了,后面很难再改。
## 绝大部分都用-id生成容器,并且后面再用exec -it 进入。
## 解决 每次启动容器ip变化的问题:https://github.com/johnnian/Blog/issues/16
- 删除某镜像文件
# 删除某镜像文件
docker rmi xxxx
容器操作:
# 查看所有的容器 及其状态
docker ps -a
# 开始/停止 容器
docker start/stop xxxx
# 查看容器日志
docker logs -f xxxx
#进入docker容器中,比attach命令更好,退出不会关闭
docker exec -it xxxxid bash
# 退出container时,这个container仍然在后台运行
exit # 或者按键“Ctrl + D”
# 另一种进出容器的命令方式:
docker attach xxxxid
Ctrl + P + Q
# 删除容器
docker rm xxxxx
容器 与 宿主机 拷贝文件:
# 1、从宿主机拷文件到容器里面
# 答:在宿主机里面执行如下命令:
# docker cp 要拷贝的文件 容器名:容器里的路径
docker cp /opt/test.js 0163ef36ca85:/usr/local/tomcat/
# 2、从容器里面拷文件到宿主机?
# 答:在宿主机里面执行以下命令:
# docker cp 容器名:容器里的路径 宿主机的路径
docker cp testtomcat:/usr/local/tomcat/test.js /opt
4 –解决bug记录:
参考:https://stackoverflow.com/questions/56870478/cannot-start-docker-container-in-docker-ce-on-oracle-linux/58758774#58758774?newreg=c9b09ee2344f432b8fcba69f56adbbaf
运行 docker run hello-world
抱错:
docker: Error response from daemon: OCI runtime create failed: container_linux.go:345: starting container process caused "process_linux.go:430: container init caused "write /proc/self/attr/keycreate: permission denied"": unknown.
解决办法:
通过运行sudo setenforce 0
禁用se的另一种方法。
然后通过运行sestatus
验证它是否已更改
环境:centros 7 ,linux内核3.10.0 ,docker版本18.09.9
原文链接:https://lookme.blog.csdn.net/article/details/103264596
本站声明:网站内容来源于网络,如有侵权,请联系我们,我们将及时处理。
评论前必须登录!
立即登录