docker从0开始到打包
服务器下载并启动docker(yum update)
yum -y install docker
systemctl start docker
拉取最新版的 Ubuntu 镜像
docker pull ubuntu
使用docker images查看已经拉取的镜像
根据镜像启动容器
docker run -itd --name ubuntu-test image_id /bin/bash
#docker run -itd -v 服务器文件路径:容器内路径 --name ubuntu-test image_id /bin/bash(主机卷的映射)
- -i: 交互式操作。
- -t: 终端。
- -d:后台运行,退出容器后容器不停止
- -v: --volume将指定的⽂件夹映射到容器的某个⽬录中
- ubuntu: ubuntu 镜像。
- /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
进入容器
使用docker ps 查看容器id docker ps -a 查看所有容器(包括已经停止的容器)
根据docker id 进入容器
docker exec -it bd391f79478e /bin/bash
进入容器后进行代码操作和各种文件操作,ubuntu容器可能需要先apt update一下
把已经有操作痕迹的docker容器进行导出
#把docker容器进行导出 export也可以导出正在运行的容器
docker export docker容器id > docker_name.tar
#export 把容器进行导出的tar文件加载为镜像方法
docker import docker_name.tar docker_name:docker.tag
###现在一般都不提倡用这种方法 基本上都是先docker commit新镜像然后save出去
把docker镜像进行保存
#把改动过的容器进行保存为tar,如果容器没有进行改动 就直接用之前的镜像就可以了
docker commit container_id new_image_id:new_tag
#把docker镜像进行导出
docker save -o docker_image.tar docker_image_name:tag
#save 把镜像进行导出的tar文件加载为镜像方法
docker load -i docker_image.tar
把导出的docker容器 docker_name.tar转移到另一台服务器
在服务器把 docker_name.tar 进行加载到docker镜像
#docker镜像重命名
docker tag image_id new_image_name:new_tag
然后根据镜像启动容器、进入容器 和之前的操作一样
docker 删除镜像
docker rmi docker_image_id (必须是没有容器在使用的镜像才可删除)
docker 删除容器
docker rm docker_id
docker 进行容器内外的文件拷贝
将主机/www/runoob目录拷贝到容器96f7f14e99ab的/www目录下。
docker cp /www/runoob 96f7f14e99ab:/www/
将主机/www/runoob目录拷贝到容器96f7f14e99ab中,目录重命名为www。
docker cp /www/runoob 96f7f14e99ab:/www
将容器96f7f14e99ab的/www目录拷贝到主机的/tmp目录中。
docker cp 96f7f14e99ab:/www /tmp/
ncidia-docker启动容器是出现问题
sudo ln -s /usr/bin/nvidia-container-toolkit /usr/bin/nvidia-container-runtime-hook
docker中遇见的问题
error
docker: Error response from daemon: driver failed programming external connectivity on endpoint cmss-sentiment-develop (9f623bdf32779a7497c3987dc719f6105ddf45ceb1a28dc4b2cd1ffdf85fa738): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 8018 -j DNAT --to-destination 172.17.0.2:80 ! -i docker0: iptables: No chain/target/match by that name.
方案
重启docker
service docker restart
或
systemctl restart docker