Docker-day2-容器介绍、常用命令

docker容器介绍、常用命令

仓库:保存镜像的地方

镜像:启动容器的模板

容器:对外提供服务的实例

  • 容器就是对外提供服务的一个实例(进程)
  • 容器启动的必要条件:容器内至少有一个进程运行在前台
  • 容器是基于镜像运行的,而镜像是放在仓库里的

思维导图:

在这里插入图片描述

1.格式参数

  • 若要创建的容器仓库没有,则会自动从网上拉取,然后再创建(运行)
# 格式
	docker run [参数] [镜像名称] [运行容器的启动命令]
	
# 参数
	-d : 以守护进程的方式运行一个容器
		docker run -d [镜像名称] [cmd]
	
	--name : 指定容器的名称
		docker run -d --name [容器名称] [镜像的名称] [cmd]
	
	-p : 指定端口映射
		docker run -d -p 宿主主机端口:容器内端口 [镜像名称] [cmd]
	
	-P :随机端口映射
		docker run -d -P [镜像名称] [cmd]
	
	-i : 打开标准输出
	
	-t : 创建一个伪终端
		docker run -it [镜像名称] [cmd]
	
	-v : 挂载目录到容器中
		docker run -v 宿主主机目录:容器内目录  [镜像名称] [cmd]
	
	--rm : 容器生命周期结束时立即删除
		docker run --rm [镜像名称] [cmd]
	
	-e : 在容器中创建一个环境变量
		docker run -e NAME=Centos -d [镜像名称] [cmd]
	
	--link : 连接上一个容器,实现网络互通
		docker run --link 被连接的容器的名称:连接别名 [镜像名称] [cmd]
	
	-h : 设置容器主机名
		docker run -h "主机名"  [镜像名称] [cmd]

2.创建容器

  • 创建容器,类似于运行一个服务、进程
# 先查看当前仓库存在的镜像(镜像运行起来就叫容器)
[root@docker ~]# docker images
REPOSITORY              TAG       IMAGE ID       CREATED        SIZE
test                    hello     cf6cd613bcad   14 hours ago   133MB
mysql                   5.7       a70d36bc331a   8 weeks ago    449MB

1.创建一个仓库已有的容器(运行一个已有的镜像)
[root@docker ~]# docker run -d nginx
ab7d5c1e42eb52cdce2dfa3185d1cf771bce314d951f6259aa9b9c51a6a5abd8

2.创建一个仓库没有的容器(运行一个不存在的镜像)# 会自动拉取(下载),再创建
[root@docker ~]# docker run -d redis
Unable to find image 'redis:latest' locally
latest: Pulling from library/redis
a076a628af6f: Already exists 
f40dd07fe7be: Pull complete 
ce21c8a3dbee: Pull complete 
ee99c35818f8: Pull complete 
56b9a72e68ff: Pull complete 
3f703e7f380f: Pull complete 
Digest: sha256:0f97c1c9daf5b69b93390ccbe8d3e2971617ec4801fd0882c72bf7cad3a13494
Status: Downloaded newer image for redis:latest
855ecad74c0d50e00ee1662135d5467a0b31e776ed9300742c60746c05682576

3.查看两个服务
[root@docker ~]# docker ps | grep nginx 
ab7d5c1e42eb   nginx     "/docker-entrypoint.…"     Up 3 minutes        80/tcp  

[root@docker ~]# docker ps | grep redis
855ecad74c0d   redis     "docker-entrypoint.s…"    Up About a minute   6379/tcp   

3.查看容器

  • 查看本机的容器列表
# 格式	
	docker ps [参数]
	docker ps # 查看当前系统中正在运行的容器列表

# 参数
	-a : 查看系统中所有的容器。
	-q : 仅显示容器的ID
	-qa:同上

在这里插入图片描述

4.启动容器

  • 前提需要先run起来,由镜像变为容器,才能启动
docker run -d --name nginx2 nginx
docker start nginx2

5.停止容器

  • 停止后,若要再启动可以直接再start,停止后有存活周期,ps -a可查看,过了存活周期需重新run~
docker stop nginx2

6.删除容器

# 格式
	docker rm [容器名称|ID]

# 参数
	-f : 强制删除
	docker rm -f [容器名称|ID]

# 清空容器两种方式:
	docker rm $(docker ps -qa)
	docker rm `docker ps -qa`

7.查看容器

# 格式
	docker inspect [容器名称|ID]
[root@docker ~]# docker inspect 8cbafe06c56c
    {
        "Id": "8cbafe06c56c7ea43d356500ad9e4d73b1aa55313562e25078902250aea6689a",
        "Created": "2021-03-19T16:16:51.902798571Z",
        "Path": "/bin/bash",
···

# 检测容器运行状态
[root@docker ~]# docker inspect -f '{{.State.Running}}' 888bdfd4a5d7
true

7.复制命令

前提:针对于运行中的容器

# 先查看运行中的容器
[root@docker ~]# docker ps
8cbafe06c56c   centos    "/bin/bash"      15 minutes ago   Up 15 minutes   cent_name 

1.复制文件到容器内
	docker cp [宿主主机文件路径]  容器ID:容器内路径
[root@docker ~]# docker cp bianliang.sh 8cbafe06c56c:/etc/q.sh

# 查看
[root@docker ~]# docker exec -it 8cbafe06c56c ls /etc/q.sh
/etc/q.sh

=======================================================================================

2.复制文件到容器外
	docker cp 容器ID:容器内路径 [宿主主机文件路径]
[root@docker ~]# docker cp cent_name:/etc/bianliang.sh /tmp/123.sh

# 查看
[root@docker ~]# ll /tmp/
total 16
-rwxr-xr-x 1 root root  178 Nov 17 20:41 123.sh

8.进入容器

# 进入容器一般有四种

1、exec : 在容器外向容器内执行一个命令(官方推荐)
	docker exec [参数] [容器的名称是ps内的名称|ID] [cmd]
# 容器外查看
[root@docker ~]# docker exec 8cbafe06c56c ls
bin
dev
···

# 进入容器
[root@docker ~]# docker exec -it f36ca3a2d063 bash
root@f36ca3a2d063:/#

2、attach : 在早期docker提供的进入容器的命令(缺点:当其结束时,容器也跟着结束了)
	docker attach [容器ID|名称]

3、nsenter : 建立一个管道连接上容器主ID
	nsenter --target $( docker inspect -f {{.State.Pid}} 30d369d70bcd) --mount --uts --ipc --net --pid

4、ssh : 通过ssh连接

9.退出容器

1.ctrl + PQ	# 保持容器运行的情况下退出:
[root@docker ~]# docker ps | grep centos
59f4a00cc257   centos    "/bin/bash"   2 minutes ago   Up 2 minutes recursing_galileo

2.exit	  # 直接退出
[root@docker ~]# docker run -it centos
[root@d2b5de710d3f /]# exit
exit
[root@docker ~]# docker ps | grep centos

3.再次进入则需要指定-it打开窗口,跟上bash
[root@docker ~]# docker exec -it f36ca3a2d063 bash
root@f36ca3a2d063:/# 

10.pull国外镜像源脚本

用法:sh /root/pull.sh gcr.io/google-samples/xtrabackup:1.0

#/bin/bash
# 参考:https://cloud.tencent.com/developer/article/1353088
# 用法:pull国外镜像时,命令为:sh /root/pull.sh gcr.io/google-samples/xtrabackup:1.0
image=$1
  echo $1
  img=`echo $image | sed 's/k8s\.gcr\.io/anjia0532\/google-containers/g;s/gcr\.io/anjia0532/g;s/\//\./g;s/ /\n/g;s/_/-/g;s/anjia0532\./anjia0532\//g' | uniq | awk '{print ""$1""}'`
  echo "docker pull $img"
  docker pull $img
  echo  "docker tag $img $image"
  docker tag $img $image

11.作业

  • 使用网桥实现容器互联
posted @ 2022-06-09 18:19  秋风お亦冷  阅读(93)  评论(0编辑  收藏  举报