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 《容器名》

更改挂载路径

1、docker stop nginx #停止容器
2、systemctl stop docker#全部退出
3、docker inspect nginx #查看容器ID
4、cd /var/lib/docker/containers/容器ID
5、将该路径下:文件config.v2.json和hostconfig.json中的”Source”从/现有挂载路径—>更改为/需要挂载的路径
6、systemctl start docker
7、启动nginx容器
8、docker start nginx
9、docker inspect -f “{{.Mounts}}” nginx#可以看到已经更改了