同步完善Docker常用操作命令

镜像

images_name 表示镜像名
con_name表示容器名

#获取镜像
docker pull images_name 
#查看已有的docker镜像
docker images
#删除镜像
docker rmi image_name
#修改镜像名
docker tag imageid name:tag
#导出镜像
docker save -o image_name.tar image_name

提交改变
将自己修改好的镜像提交到本地

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

docker commit -a "leifengyang"  -m "首页变化" 341d81f7504f guignginx:v1.0
#这样启动之后,运行的就是我们修改过的定制镜像
docker run -d -p 88:80 guignginx:v1.0

image.png

容器

con_name表示容器名
image_name 表示镜像名

#启动一个容器
docker run image_name

#查看正在运行的容器
docker ps

#查看所有的容器
docker ps -a

#停止/启动/重启 一个容器
docker stop/start/restart con_name

#删除容器
docker stop 容器
docker rm 
docker rmi

#编辑容器名称
docker rename 原容器名 新容器名

#看容器的端口映射情况
docker port con_name

#动态查看容器日志
docker logs -f con_name

#动态查看最后100行的容器日志
docker logs -f –tail 100 con_name

#查看容器pid
docker top con_name

#查看docker容器IP
docker inspect con_name| grep IPAddress

#进入容器
docker exec -it con_name  /bin/bash

端口映射:
用docker安装上mysql,去docker仓库里搜索mysql

sudo docker pull mysql:5.7

# --name指定容器名字 
# -v目录挂载 前面的目录是Linux物理服务器的本地目录,后面的是mysql容器内部的目录
# -p指定端口映射(前面的端口是Linux物理服务器的端口)  
# -e设置mysql参数 -d后台运行
sudo docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7

#这时我们在Linux虚拟机上,可以看到mysql容器的内部数据变化
#也可以 修改Linux虚拟机的/mydata/mysql/目录文件,自动同步到mysql容器内
[root@localhost vagrant]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
6a685a33103f        mysql:5.7           "docker-entrypoint.s…"   32 seconds ago      Up 30 seconds       0.0.0.0:3306->3306/tcp, 33060/tcp   mysql
docker exec -it mysql bin/bash
exit;


因为有目录映射,所以我们可以直接在镜像外执行
vi /mydata/mysql/conf/my.conf 

[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve

保存(注意评论区该配置不对,不是collection而是collation)

docker restart mysql

网络

net_name 网络名

#查看所有网络
docker network ls
#创建一个docker网络
docker network create -d bridge net_name
#创建一个docker网络
docker run –network= net_name -itd –name=con_name image_name
#创建一个docker网络
docker network connect net_name con_name

文件

host_path 主机文件路径
container_path 容器文件路径
containerID 容器id,用容器名也可以

#从主机复制到容器
sudo docker cp host_path containerID:container_path
#从容器复制到主机
sudo docker cp containerID:container_path host_path

kubenetes类似
1.kubectl cp /主机目录/文件路径 podName:/容器路径/xxx.datasource -n namespaces
这样可以把主机目录文件拷贝到容器内
2.kubectl cp podName:容器路径/xxx.datasource -n namespaces /主机目录
这样可以把容器内文件cp到主机目录

日志

#刚运行就退出的容器,查看日志
docker start con_name -ia
#动态查看容器日志
docker logs -f con_name
#动态查看最后100行的容器日志
docker logs -f –tail=100 con_name

配置

#查看容器配置
docker inspect con_name

中间件安装

mysql

用docker安装上mysql,去docker仓库里搜索mysql

sudo docker pull mysql:5.7

# --name指定容器名字 
# -v目录挂载 前面的目录是Linux物理服务器的本地目录,后面的是mysql容器内部的目录
# -p指定端口映射(前面的端口是Linux物理服务器的端口)  
# -e设置mysql参数 -d后台运行
sudo docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7

这时我们在Linux虚拟机上,可以看到mysql容器的内部数据变化
也可以 修改Linux虚拟机的/mydata/mysql/目录文件,自动同步到mysql容器内

[root@localhost vagrant]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
6a685a33103f        mysql:5.7           "docker-entrypoint.s…"   32 seconds ago      Up 30 seconds       0.0.0.0:3306->3306/tcp, 33060/tcp   mysql

docker exec -it mysql bin/bash
exit;


因为有目录映射,所以我们可以直接在镜像外执行
vi /mydata/mysql/conf/my.conf 

[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve

保存(注意评论区该配置不对,不是collection而是collation)

docker restart mysql

Redis

如果直接挂载的话docker会以为挂载的是一个目录,所以我们先创建一个文件然后再挂载,在虚拟机中。

# 在虚拟机中,Linux如果不提前创建redis.conf,-v /mydata/redis/conf/redis.conf会把redis.conf当作目录
mkdir -p /mydata/redis/conf
touch /mydata/redis/conf/redis.conf

docker pull redis

docker run -p 6379:6379 --name redis \
-v /mydata/redis/data:/data \
-v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf \
-d redis redis-server /etc/redis/redis.conf

# 直接进去redis客户端。
docker exec -it redis redis-cli

默认是不持久化的。在配置文件中输入appendonly yes,就可以aof持久化了。修改完docker restart redis,docker -it redis redis-cli

exit
vim /mydata/redis/conf/redis.conf
# 插入下面内容,aof持久化
appendonly yes
保存

docker restart redis

设置redis容器在docker启动的时候启动

docker update redis --restart=always

nginx

docker pull nginx:1.10
# 随便启动一个nginx实例,只是为了复制出配置,放到docker里作为镜像的统一配置
docker run -p 80:80 --name nginx -d nginx:1.10

cd /mydata/nginx
docker container cp nginx:/etc/nginx .
然后在外部 /mydata/nginx/nginx 有了一堆文件
mv /mydata/nginx/nginx /mydata/nginx/conf
# 停掉nginx
docker stop nginx
docker rm nginx

# 创建新的nginx
docker run -p 80:80 --name nginx \
-v /mydata/nginx/html:/usr/share/nginx/html \
-v /mydata/nginx/logs:/var/log/nginx \
-v /mydata/nginx/conf:/etc/nginx \
-d nginx:1.10

# 注意一下这个路径映射到了/usr/share/nginx/html,我们在nginx配置文件中是写/usr/share/nginx/html,不是写/mydata/nginx/html

docker update nginx --restart=always

测试

cd /mydata/nginx/html/
vim index.html
随便写写
测试 http://192.168.56.10:80

dockers卸载

docker 卸载
使用yum安装docker(安装过程可以参照linux 安装docker),如需卸载docker可以按一下步骤操作:

1、查看当前docker状态

image.png
如果是运行状态则停掉
systemctl stop docker
image.png

2、查看yum安装的docker文件包

yum list installed |grep docker
image.png
如果执行了上一步的删除操作,则这里的rpm就不会显示
查看docker相关的rpm源文件,rpm -qa |grep docker
image.png

3、删除所有安装的docker文件包

yum -y remove docker.x86_64
image.png
其他的docker相关的安装包同样删除操作,删完之后可以再查看下docker rpm源
rpm -qa |grep docker
image.png

4、删除docker的镜像文件,默认在/var/lib/docker目录下

image.png
删除上述的docker目录
rm -rf /var/lib/docker
image.png
到此docker卸载就完成了

posted @ 2021-12-15 21:10  liuyanntes'cnblogs  阅读(122)  评论(0编辑  收藏  举报