ubuntu下使用docker命令小记

(前提:已成功安装docker)

1、将docker添加sudo权限,这样再运行docker,就不用每次都烦人的添加sudo了
sudo groupadd docker			#添加group
sudo gpasswd -a wyl docker  	#添加用户到组
sudo service docker restart		#重启docker服务
newgrp docker 			    	#更新用户组
2、docker更换镜像源,这样在执行pull命令的时候,下载速度会快一点
cd /etc/docker
sudo vim daemon.json   # 有的可能没有这个文件,不过没关系,直接运行此命令即可

【Tip:ctrl+insert(复制)、shift+insert(粘贴)可以用于linux系统】
输入i进入编辑模式,开始添加以下内容	
{
	"registry-mirrors": [
	"https://docker.mirrors.ustc.edu.cn",
	"https://hub-mirror.c.163.com/",
	"https://reg-mirror.qiniu.com",
	"https://registry.docker-cn.com"]
}
复制完成,按ESC退出编辑模式,然后输入 :wq!  进行保存

sudo systemctl reload docker  # 重新加载docker配置文件
sudo systemctl restart docker # 重启docker服务
docker info 				  # 查看Registry Mirrors字段,确定镜像源修改成功
3、docker查找镜像是否存在:
docker search img_name 		  # img_name想要查询的镜像名称
4、docker查看容器信息:
docker ps  # 查看运行中的容器
docker ps -a # 查看所有容器,包含停止运行的容器
5、docker启动mysql镜像:
docker run --name mysql_img -p 13306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql 

# --name mysql_img 	指定启动的容器名称,可省略
# -p 			  	13306:3306 13306是映射到宿主机上的端口,3306是docker容器内部的启动端口
# -e 				MYSQL_ROOT_PASSWORD=root 指定mysql启动后的连接密码,用户名默认都是root
# -d 				指的是在后台启动,不在宿主机显示控制台
# mysql 		    镜像名称,最好加上版本号,例 mysql:5.6
6、docker启动redis镜像:
docker run -itd --name redis_img -p 16379:6379 redis
7、进入容器:
docker exec -it 3ba4643f0c8b /bin/bash
# 3ba4643f0c8b 	   容器id
# 进入容器的前提是,  此容器必须是运行的状态
# 有的小伙伴运行此命令可能报错,那就把/bin/bash换成/bin/sh试一下
8、启动nginx镜像:
sudo docker run -p 8080:80-d ubuntu/nginx

附:我这是pull的是ubuntu/nginx
	容器启动后,
		默认读取的前端文件路径是:/var/www/html/(默认读取html文件夹下的内容作为展示)
		默认的配置文件路径是:    /etc/nginx/sites-enabled/defult(default是一个可修改的文件)
			  
	如果要修改启动端口、IPV6、读取文件路径等配置信息,直接修改配置文件default即可
	修改完成要在容器内重启nginx服务:
		nginx -s reload  # 重新加载配置文件
		nginx restart 	 # 重启nginx服务
9、修改容器内系统镜像源:
启动容器相当于启动一个系统,里边也是需要下载东西的,可以替换一下容器内的镜像源:

	此处以ubuntu为例:
		mv /etc/apt/sources.list /etc/apt/sources.list.bak  # 先把源数据进行备份
	
	逐个运行命令行添加镜像源地址:
		echo "deb http://mirrors.163.com/debian/ jessie main non-free contrib" >> /etc/apt/sources.list
		echo "deb http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list
		echo "deb-src http://mirrors.163.com/debian/ jessie main non-free contrib" >>/etc/apt/sources.list
		echo "deb-src http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list
	
	更新添加完成的镜像源:
		apt-get update
10、复制本地文件到容器中:
docker cp /Users/xxx/Downloads/aaa.zip 容器id:/opt/rabbitmq/plugins
# /Users/xxx/Downloads/aaa.zip 本地文件路径
# /opt/rabbitmq/plugins 	   容器内需要复制的路径
11、根据Dockerfile文件生成镜像:
docker build -t image_name .       
# 命令最后有个“.”,千万不能忽略,要在Dockerfile路径下运行此命令
12、将容器打包成镜像:
docker commit cb1e6559e117aaa_build:v1.0
# cb1e6559e117  	容器id
# aaa_build:v1.0 	打包后的镜像名字及版本号
# 还有一些其他的附加命令,比如-a 添加作者信息、-m 添加镜像描述等
13、将镜像打成tar包:
docker save -o aaa_build_1.0.tar aaa_build:v1.0
# aaa_build_1.0.tar 打成tar包的名字
# aaa_build:v1.0 	镜像名字及版本号
14、将镜像tar包加载为镜像:
docker load -i aaa_build_1.0.tar
# aaa_build_1.0.tar tar包名字
15、docker运行镜像并指定挂载的已启动的mysql和redis的docker容器:
docker run -itd --link=mysql_img:mysql_img --link=redis_img:redis_img -p 8088:8081 bluebell:v1.0
# mysql_img  mysql 的容器名称
# redis_img  redis 的容器名称
# -itd		 -i -t -d三个命令的缩写
# 8887		 映射到主机的端口
# 8081		 docker内部启动端口
16、docker镜像目录解析:
镜像并不只是单个的一个文件,是由json文件和多个层级的文件一块组成的:
/var/lib/docker/image/<graphdriver>: 存储镜像管理数据的目录,以使用的存储驱动命名
/distribution:	pull的镜像相关元数据
/imagedb:		镜像数据库
/content:		构成镜像的每层次的配置数据

  更多目录解析请移步至:docker镜像存储详解

17、修改容器配置文件:
/var/lib/docker/containers/[hash_of_the_container]/hostconfig.json 
# hash_of_the_container  是容器id的长字符串,修改此系统文件需要加sudo
	# 通常是为了修改容器映射端口号的配置,修改后需要systemctl restart docker
18、docker将本地镜像上传至私有仓库(前提是有一个搭建好的私有仓库,并且是可连接的):
登录服务器:	docker login 192.168.203.133:8088
首先打标签:	docker tag nginx_dist:v1.0 192.168.203.133:8088/ubuntu_test/nginx_dist:v1.0
直接上传:    docker push 192.168.203.133:8088/ubuntu_test/nginx_dist:v1.0
19、启动容器时,查看映射到宿主机的端口是否被占用
netstat -ap | grep 8080  # 8080 需要查询的映射端口


2022-06-23

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐