docker exec和docker run
- 相同点:
都可以用于启动Docker容器。
- 不同点:
docker run命令用于创建并启动一个新的Docker容器,可以在启动容器时指定容器名称、镜像名称、端口映射、挂载数据卷等参数。docker run只能用于启动新容器,不能用于操作已经运行的容器。
docker exec命令用于在已经运行的Docker容器中启动一个新的进程,可以在运行时指定要执行的命令或程序。docker exec只能用于操作已经运行的容器,不能用于启动新的容器。
因此,总的来说,docker run用于创建和启动新的Docker容器,而docker exec用于在已经运行的Docker容器中执行进程或命令。
#decker exec #进入容器后开启一个新的终端,可以在里面操作(常用)
#docker attach #进入容器正在执行的终端,不会启动新的进程!
docker部署
以下是将现有容器打包为Docker镜像并部署到其他电脑的步骤:
1/保存现有容器为一个新的镜像
在现有容器上运行docker commit命令,将容器的当前状态保存为一个新的镜像。例如,假设现有容器的名称为mycontainer,可以运行以下命令将其保存为新的镜像:
docker commit mycontainer myimage:tag
其中,myimage表示新的镜像名称,tag表示镜像标签。
2/保存镜像为文件
运行docker save命令将镜像保存为一个文件。例如,假设新的镜像名称为myimage,可以运行以下命令将其保存为文件:
docker save myimage > myimage.tar
其中,myimage表示要保存的镜像名称,myimage.tar表示保存的文件名。
3/将镜像文件复制到其他电脑
将保存的镜像文件复制到要部署镜像的其他电脑上。
4/加载镜像文件
在其他电脑上运行docker load命令将镜像文件加载为一个镜像。例如,可以运行以下命令在其他电脑上加载镜像文件:
docker load < myimage.tar
5/运行容器
在其他电脑上使用docker run命令运行新的镜像,并创建一个容器。例如,可以运行以下命令在其他电脑上运行新的镜像:
docker run -d -p 8080:80 myimage:tag
其中,-d选项表示在后台运行容器,-p选项表示将容器内部的端口映射到宿主机上的端口,8080表示宿主机上的端口,80表示容器内部的端口,myimage:tag表示要运行的镜像名称和标签。
启动容器
(base) @znwl-hp-z240-tower-workstation:~/图片$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ce26ce33d787 my_zip:tag “/bin/bash” 10 minutes ago Up 10 minutes dreamy_faraday
8e11d4d78402 centos “/bin/bash” 43 hours ago Up 43 hours my_contain
(base) @znwl-hp-z240-tower-workstation:~/图片$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
83a83d03d872 my_zip:tag “/bin/bash” 6 minutes ago Exited (0) 29 seconds ago zip_move
ce26ce33d787 my_zip:tag “/bin/bash” 10 minutes ago Up 10 minutes dreamy_faraday
d9b1b1dd242e my_zip:tag “/bin/bash” 3 hours ago Exited (0) 3 hours ago zip
ebcbd5e7caee centos “/bin/bash” 43 hours ago Exited (0) 43 hours ago elegant_jennings
96cfe9dd4823 centos “/bin/bash” 43 hours ago Exited (0) 43 hours ago recursing_faraday
8e11d4d78402 centos “/bin/bash” 43 hours ago Up 43 hours my_contain
(base) @znwl-hp-z240-tower-workstation:~/图片$ sudo docker exec -it zip_move /bin/bash
Error response from daemon: Container 83a83d03d872ac52ed196f468a4d3e2b94bb6d5a6220f962e61346311cfdb8e2 is not running
(base) @znwl-hp-z240-tower-workstation:~/图片$ sudo docker start zip_mobe
Error response from daemon: No such container: zip_mobe
Error: failed to start containers: zip_mobe
(base) @znwl-hp-z240-tower-workstation:~/图片$ sudo docker start zip_move
zip_move
(base) @znwl-hp-z240-tower-workstation:~/图片$ sudo docker exec -it zip_move /bin/bash
[root@83a83d03d872 /]# ls
0406.txt 1.txt bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@83a83d03d872 /]# ^C
创建容器名字
docker run --name [自定义名称] [镜像名称]:[版本号]
创建容器并挂载
sudo docker run --name mounted -it -v /home/fangzhiming/mount/:/mnt my_zip:tag /bin/bash
将镜像my_zip:tag改名为mounted容器 注意默认my_zip:latest.有版本号需要附带上。:tag不可少。
/home/fangzhiming/mount/ 路径为宿主机
/mnt 路径为容器内部的文件夹
docker ps
sudo docker ps 查看正在运行的容器
sudo docker ps 查看所有的容器
如果
sudo docker ps 如果没有查到想要运行的容器,需要docker start 《容器名》
更改挂载路径
- docker stop nginx #停止容器
- systemctl stop docker#全部退出
- docker inspect nginx #查看容器ID
- cd /var/lib/docker/containers/容器ID
- 将该路径下:文件config.v2.json和hostconfig.json中的"Source"从/现有挂载路径—>更改为/需要挂载的路径
- systemctl start docker
- 启动nginx容器
- docker start nginx
- docker inspect -f “{{.Mounts}}” nginx#可以看到已经更改了