自己检索方便
1 docker安装
1.1卸载旧版本
较旧的 Docker 版本称为 docker 或 docker-engine 。如果已安装这些程序,请卸载它们以及相关的依赖项。
(1)杀死所有运行容器
docker kill $(docker ps -a -q)
(2)删除所有容器
docker rm $(docker ps -a -q)
(3)删除所有镜像
docker rmi $(docker images -q)
(4)停止 docker 服务
systemctl stop docker
(5)删除存储目录
rm -rf /etc/docker# rm -rf /run/docker# rm -rf /var/lib/dockershim# rm -rf /var/lib/docker
如果发现删除不掉,需要先 umount,如
umount /var/lib/docker/devicemapper
(6)首先搜索已经安装的docker 安装包
[root@localhost ~]# yum list installed|grep docker
docker.x86_64 2:1.12.6-16.el7.centos @extras
docker-client.x86_64 2:1.12.6-16.el7.centos @extras
docker-common.x86_64 2:1.12.6-16.el7.centos @extra
(7) 分别删除安装包
[root@localhost ~]#yum –y remove docker.x86_64 docker-client.x86_64 docker-common.x86_64
(8) 删除docker 镜像
[root@localhost ~]# rm -rf /var/lib/docker
(9)再次check docker是否已经卸载成功
[root@localhost ~]# yum list installed|grep docker
如果没有,就表示卸载成功。
在新主机上首次安装 Docker Engine-Community 之前,需要设置 Docker 仓库。之后,您可以从仓库安装和更新 Docker。
1.2安装 Docker Engine-Community
设置仓库
安装所需的软件包。yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2。
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
可以选择国内的一些aliyun源地址:
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
1.3安装 Docker Engine-Community
(1)安装最新版本的 Docker Engine-Community 和 containerd,或者转到下一步安装特定版本:
sudo yum install docker-ce docker-ce-cli containerd.io
(2)安装特定版本的docker
列出可以安装的可用版本
yum list docker-ce --showduplicates | sort -r
选择特定版本安装,这里选择18.06.0.ce-3.el7版本
sudo yum install docker-ce-18.06.0.ce-3.el7 -y
1.4启动 Docker。
sudo systemctl start docker
通过运行 hello-world 映像来验证是否正确安装了 Docker Engine-Community 。
sudo docker run hello-world
1.5 CentOS中修改Docker的默认根目录
1) 先使用: ‘docker info’ 命令,看下原来默认的根目录位置
docker info
2)先关闭docker服务
service docker stop
3)直接修改/etc/docker/daemon.json:
修改docker安装目录到/mnt目录:
{
"data-root": "/mnt/docker"
}
4)在你指定的目录位置新建文件夹 /new-path/docker
5)重启docker服务
service docker start
sudo systemctl start docker
6)使用docker info命令确认是否修改成功
2 docker常用命令
$docker search ubantu #搜索镜像
$docker pull ubantu #载入镜像
$docker run -it ubuntu /bin/bash #启动镜像
root@ed09e4490c57:/# exit退出容器
$ docker ps -a #查看所有的容器
$ docker ps -l #查看最后一次创建的容器
$ docker start b750bbbcfd88 #使用 docker start 启动一个已停止的容器
$ docker stop <容器 ID> #停止一个容器
$ docker restart <容器 ID> #重启一个容器
$ docker rm -f <容器 ID> #删除一个容器
$ docker rmi <镜像名称> #删除一个镜像
$ docker run -itd --name ubuntu-test ubuntu /bin/bash #后台运行容器
$ docker exec -it <容器 ID> /bin/bash #进入一个容器
镜像打包如下:
$docker ps
$docker login harbor.XX.io/openvas
#输入域帐号&密码
$docker commit <容器name> harbor.XX.io/openvas:[tag_openvas_20200710_XXXX]
$docker push harbor.XX.io/openvas:[tag_openvas_20200710_XXXX] #
2.1 docker 访问宿主机目录
挂载一个目录
docker run -it -v $path_to_host_data:$new_path_in_docker deep_sleepnet:1.0 /bin/bash
执行之后,相当于把此数据目录挂载在对应docker的目录中,用 即可查看并访问所挂载数据。Dockerfile中最后一行运行相应的
例如:
[root@m01ly ~]# docker run -it -m 4G -v /var/log/suricata:/mnt -p 5601:5601 -p 9200:9200 -p 5044:5044 sebp/elk: 638
[root@m01ly ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
45a7bc7b174d sebp/elk:623 "/usr/local/bin/star…" 13 hours ago Up 12 hours 0.0.0.0:5044->5044/tcp, 0.0.0.0:5601->5601/tcp, 0.0.0.0:9200->9200/tcp, 9300/tcp charming_wu
[root@m01ly ~]# docker exec -it 45a7bc7b174d bash
root@45a7bc7b174d:/# ls
bd_build bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
可以看到宿主机文件夹mnt
挂载两个目录
注意每个目录前都要加参数-v
docker run -it -v $path_to_host_data:$new_path_in_docker -v $path1_to_host_data:$new_path1_in_docker deep_sleepnet:1.0 /bin/bash
2.2 查看docker容器linux版本
查看 Docker Linux 容器系统对应发行版本。
使用如下命令查看。
cat /etc/issue
而常用的 uname -a
等等命令,则是查看到宿主机的发行版本
2.3 集合操作
列出所有的容器 ID
docker ps -aq
停止所有的容器
docker stop $(docker ps -aq)
删除所有的容器
docker rm $(docker ps -aq)
删除所有的镜像
docker rmi $(docker images -q)
删除所有不使用的镜像
docker image prune --force --all或者docker image prune -f -a
删除所有停止的容器
docker container prune -f
批量删除镜像
可以删除所有名字中带 “none” 关键字的镜像,即可以把所有编译错误的镜像删除。
docker rmi $(docker images | grep "none" | awk '{print $3}')
上面这条命令,可以删除所有名字中带 “none” 关键字的镜像,即可以把所有编译错误的镜像删除。
这个 grep 后面的参数,就是筛选出名字中包含这个参数的镜像。
3 dockerfile
https://www.runoob.com/docker/docker-dockerfile.html
3.1 dockerfile编写
3.2 构建镜像
在 Dockerfile 文件的存放目录下,执行构建动作。
以下示例,通过目录下的 Dockerfile 构建一个 nginx:v3(镜像名称:镜像标签)。
docker build -t nginx:v3 .
注:最后的 . 代表本次执行的上下文路径。上下文路径,是指 docker 在构建镜像,有时候想要使用到本机的文件(比如复制),docker build 命令得知这个路径后,会将路径下的所有内容打包。
解析:由于 docker 的运行模式是 C/S。我们本机是 C,docker 引擎是 S。实际的构建过程是在 docker 引擎下完成的,所以这个时候无法用到我们本机的文件。这就需要把我们本机的指定目录下的文件一起打包提供给 docker 引擎使用。
如果未说明最后一个参数,那么默认上下文路径就是 Dockerfile 所在的位置。
注意:上下文路径下不要放无用的文件,因为会一起打包发送给 docker 引擎,如果文件过多会造成过程缓慢。