离线安装docker及常用docker命令

Linux 同时被 2 个专栏收录
25 篇文章 0 订阅
15 篇文章 0 订阅

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 社区版)

简单介绍下安装步骤:

  1. 通过 FileZilla 等文件传输工具将 docker-18.03.1-ce.tar 放到用户目录下,并移动到该目录执行下述命令解压二进制包
$ tar xzvf docker-18.03.1-ce.tar
  1. 将解压出来的 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 用户组。

  1. 添加 docker group :
sudo groupadd docker
  1. 将用户加入该 group 内
sudo gpasswd -a ${USER} docker
  1. 使用chgrp命令更改文件所属用户组
chgrp docker /var/run/docker.sock
  1. 重启服务
sudo service docker restart
  1. 切换一下用户组(刷新缓存)
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

  1. 首先最好 把 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
  1. 为了方便添加软件源,支持 devicemapper 存储类型,安装如下软件包
sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2
  1. 安装 Docker
sudo yum update
sudo yum install docker-ce

  1. 启动 Docker服务
# 如果想添加到开机启动
sudo systemctl enable docker

# 启动 docker 服务
sudo systemctl start docker

  1. 是普通用户有权限使用docker

加入 docker 用户组命令

sudo usermod -aG docker USER_NAME

更改文件权限:参见本文 1.3

  1. 验证是否安装:
docker images

2.2 离线下载镜像 并 打包

参考:《离线环境获取Docker镜像》 https://my.oschina.net/u/3446722/blog/988807

一般在公司我们面临这样的问题:

  • 有服务器node01、node02
  • 其中 node01可以访问外网,node02不能访问外网,但node01与node02之间是互通的
  1. 在node01上,从远程仓库获取hello-world镜像
docker pull hello-world 
  1. 查看下载好的镜像
docker images

# 显示如下信息:

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              fce289e99eb9        10 months ago       1.84kB

  1. hello-world镜像保存成 tar 归档文件
docker save -o hello-world-image.tar xxx/hello-world

# 其中docker save : 将指定镜像保存成 tar 归档文件。 -o :输出到的文件。
  1. 将保存好的hello-world-image.tar上传至服务器node02上

  2. 登录node02,使用离线安装好的docker加载hello-world-image.tar

# docker load : 加载指定的tar归档文件格式的镜像。-i :指定要读取的tar归档文件格式的镜像。
docker load -i oracle-12c.tar
  1. 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

  • 0
    点赞
  • 1
    评论
  • 8
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值