Docker コマンド百科事典とスクリプトの使用法

ドッカーとは

Docker は、開発者がアプリケーションと依存関係をポータブル コンテナにパッケージ化し、それを一般的な Linux または Windows オペレーティング システム マシンに公開できるオープン ソースのアプリケーション コンテナ エンジンであり、仮想化、コンテナのサンドボックス メカニズムを完全に使用することもできます。 、それらの間にインターフェイスはありません。Docker コンテナは仮想マシンに似ており、起動、停止、削除などを実行できます。各コンテナは互いに隔離されています。アプリケーション固有のコードと必要な依存関係ファイルを含む、特定のアプリケーションがコンテナー内で実行されます。Docker イメージの概念は、仮想マシンのイメージに似ています。読み取り専用のテンプレートであり、コンテナーの実行に必要なデータを含む独立したファイル システムを使用して、新しいコンテナーを作成できます。

Docker のインストールとアンインストール

//Ubuntu安装docker
sudo apt install docker.io  

//CentOS安装docker 
sudo yum install docker.io

//验证是否安装成功
docker

//卸载引擎Ubuntu  
sudo apt-get purge docker.io

//卸载引擎Centos  
sudo yum remove docker.io

//删除Docker数据目录  
sudo rm -rf /var/lib/docker 

Dockerの基本コマンド

ミラー操作コマンド

docker --help      #查看所有的指令 帮助指令

#镜像操作
docker images      #查看所有的镜像   -a列出所有镜像   -q只显示镜像ID   
docker inspect [image ID]  #根据镜像ID获取镜像的详细信息
docker tag [旧名称]:[旧标签]  [新名称]:[新标签] # 修改镜像的名称和标签  
docker rmi [标签]/[镜像ID]   #删除镜像  

docker save -o [保存路径]/[文件名].tar [镜像名称]:[版本号] / [镜像ID]  #导出镜像
docker load -i [保存路径]/[文件名].tar #导入镜像

##通过镜像ID导出的镜像没有名字 推荐使用镜像名称导出镜像包
docker save -o package.tar testname:1.0.0 #导出压缩包
sudo tar -zcvf package.tar.gz package.tar
docker save testname:1.0.0 | gzip > package.tar.gz

docker load -i package.tar.gz   #导入压缩之后的镜像包
docker load --name myimage:v1.0 --label "version=v1.0" myimage.tar #load的时候指定镜像的名称

コンテナ操作コマンド

#容器操作
docker create -it [镜像ID]/[镜像名称]    #创建镜像 -i容器输入保持打开  -t docker分配伪终端
docker start [容器ID/容器名称]           #启动容器
docker stop [容器ID/容器名称]  			 #停止容器
docker restart [容器ID/容器名称]  		 #重启容器

docker run  [选项] 镜像名 /bin/bash      #创建并启动一个容器  
docker ps    #查看处于运行状态的容器  -a 显示所有容器  -q只显示ID   -aq 显示所有的ID  -s显示容器大小  

docker exec [option] [容器ID/容器名称]  #进入容器  -i容器输入保持打开 -t分配一个伪终端 -c避免交互直接在容器内执行命令
#sudo docker exec -it  ec39c06d549b /bin/bash
#exit 或者 Ctrl+D退出编辑器 

docker logs container_id 				  #查看容器内的标准输出
docker export container_id  > ubuntu.tar  #导出docker本地容器
cat docker/ubuntu.tar   | docker import - test/docker:V1  #从容器快照导入为镜像test/docker:V1
docker import http://url.addr   #通过指定URL来导入镜像

docker port #查看端口的绑定情况  
#docker port adoring_stonebraker 5000

#网络查询
docker network create -d bridge test-net #新建一个docker网络  
docker network ls #查看网络列表
docker run -itd --name test1 --network test-net ubuntu /bin/bash #运行一个容器并连接到新建的test-net网络


docker export [容器ID/名称] > 文件名 			   #容器的导出
cat [文件名] | docker improt [生成的镜像名称:标签]  #容器的导入

docker rm [容器名称/ID] 						   #删除容器  
docker commit [选项] [容器ID或容器名] [仓库名:标签]  #将容器创建为镜像  
#-a 修改人  -m备注 -c使用dockerfile指令来创建 -p commit的时候暂停容器
docker stop $(docker ps -a -q)  #停止所有容器
docker rm $(docker ps -a -q)    #删除所有容器  
sudo docker create -it --name=[容器名称] [镜像ID/镜像名称] /bin/bash  ##以特定名称创建容器容器

docker ps -a --no-trunc  ## 查看容器的详细运行命令


docker version     #查看版本
docker info        #查看容器的安装情况
docker network ls  #查看网络列表
docker network cat #自建bridge网络
docker cp [容器ID:绝对路径] [绝对路径(物理机)] #容器文件拷贝到物理机
docker cp [绝对路径(物理机)] [容器ID:绝对路径] #物理机文件拷贝到容器
docker pull        #从远程拉取一个镜像
docker push        #将一个镜像推送到远程仓库
docker build       #构建容器镜像
docker pause       #暂停容器中的所有进程
docker top         #查看容器中运行的进程信息
docker stat        # 显示容器资源的使用情况

複合命令の解析

#创建并运行容器
docker run -d -p 1935:1935 -p 8080:80 -p 8554:554 -p 10000:10000 -p 10000:10000/udp -p 8000:8000/udp  --name my_docker  official:master \
-v /home/docker/media/bin:/opt/media/bin  -v /home/docker/conf:/opt/media/conf
#这个命令的各个参数含义如下:  
#-d 让 Docker 容器在后台运行  
#-p 1935:1935:将主机的1935端口映射到容器的1935端口
#-p 8080:80:将主机的8080端口映射到容器的80端口
#-p 8554:554:将主机的8554端口映射到容器的 554 端口
#-p 10000:10000:将主机的10000端口映射到容器的 10000 端口  
#-p 10000:10000/udp:将主机的 10000 端口映射到容器的 10000 端口,并设置为 UDP 协议  
#-p 8000:8000/udp:将主机的 8000 端口映射到容器的 8000 端口,并设置为 UDP 协议  
#--name my_dockert:将容器命名为 my_docker 
# official:master:要运行的容器镜像
#-v /home/docker/media/bin:/opt/media/bin 映射本地目录到容器
#-v /home/docker/conf:/opt/media/conf 映射本地目录到容器

スクリプト呼び出し

#判断是否安装了docker  
if ! [ -x "$(command -v docker)" ]; then
  echo 'Docker is not installed.'
  exit 1
else
  echo "Docker has installed." 		
fi

#判断容器是否存在
container_name="test_container"
if [[ "$(sudo docker ps -a | grep ${
      
      container_name} | grep -v 'grep')" != "" ]]; then
	echo "${container_name} 容器已经存在"
else
	echo "${container_name} 容器不存在"
fi

#判断容器是否在运行
if [ "$(sudo docker inspect -f '{
      
      {.State.Running}}' ${
      
      container_name} 2>/dev/null)" == "true" ]; then
	echo "${container_name} 容器正在运行"
else
    echo "${container_name} 容器停止运行"
fi        

#判断镜像是否存在
if [[ "$(sudo docker images -q ${
      
      image_name} 2> /dev/null)" != "" ]];then
	echo "'${image_name}' docker image has loaded"
else
	echo "'${image_name}' docker image not loaded"
fi

よくある問題の分析

1. Docker コンテナ間でポートの競合は発生しますか?
はい、ポート マッピングを通じてこの問題を解決できます。コンテナの起動時に、Docker CLI または Docker Compose 構成を使用して、コンテナの内部ポートをコンテナ上の別のポートにマップできます。ホスト。このように、複数のコンテナが同じポートを公開している場合でも、ポートを異なる方法でマッピングすることでポートの競合を回避できます。このように、異なるコンテナーではホスト ポートは同じですが、コンテナーの内部ポートは競合しません。同時に、異なるホスト ポートを使用して同じコンテナの複数のポートをマッピングできるため、より柔軟なポート管理が可能になります。複数のコンテナがマッピングに同じホスト ポートを使用する場合、ホスト ポートが競合する可能性があることに注意してください。

おすすめ

転載: blog.csdn.net/yang1fei2/article/details/131100466