[docker]四、docker必会的常用命令和用docker起MySQL容器需要注意的事项
1、常用命令汇集1.1、dokcer verion[root@localhost ~]# docker versionClient: Docker Engine - Community# 社区版本Version:20.10.14API version:1.41Go version:go1.16.15# 因为docker使用go语言开发的Git commit:a224086Built:
目录
1.9、docker container inspect + 容器名字
1.9.2、 run一个容器的时候,加"-p"映射端口会发生一些什么变化?
1.9.4、用docker里的centos镜像下载tree和vim命令
1、常用命令汇集
Ubuntu的命令一般只需要在centos的命令的基础上,在前边加上sudo就行
1.1、dokcer verion
[root@localhost ~]# docker version
Client: Docker Engine - Community # 社区版本
Version: 20.10.14
API version: 1.41
Go version: go1.16.15 # 因为docker使用go语言开发的
Git commit: a224086
Built: Thu Mar 24 01:49:57 2022
OS/Arch: linux/amd64 # 这个docker是装在linux上的
Context: default
Experimental: true
Server: Docker Engine - Community # 这里是分客户机和服务机的
Engine:
Version: 20.10.14
API version: 1.41 (minimum version 1.12)
Go version: go1.16.15
Git commit: 87a90dc
Built: Thu Mar 24 01:48:24 2022
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.5.11
GitCommit: 3df54a852345ae127d1fa3092b95168e4a88e2f8
runc:
Version: 1.0.3
GitCommit: v1.0.3-0-gf46b6ba
docker-init:
Version: 0.19.0
GitCommit: de40ad0
1.2、docker images
查看你的dokcer里边有哪些镜像
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest feb5d9fea6a5 6 months ago 13.3kB
daocloud.io/nginx latest 6084105296a9 13 months ago 133MB
# 镜像名字 标签 编码 什么时候创建的 多大
1.3、docker search
查看哪有镜像,例如,nginx
[root@localhost ~]# docker search nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 16635 [OK]
bitnami/nginx Bitnami nginx Docker Image 122 [OK]
ubuntu/nginx Nginx, a high-performance reverse proxy & we… 40
bitnami/nginx-ingress-controller Bitnami Docker Image for NGINX Ingress Contr… 17 [OK]
。。。。。
stars越多,表示这个镜像越受欢迎 。若是想要下载镜像,我们可以先使用docker search 查找之后,再进行选择你想要下载的镜像。下载命令"docker pull + NAME",这个NAME就是docker search查找到的NAME。
1.3.1、docker pull
🍓[下载mysql]🍓
[root@localhost ~]# docker pull mysql
下载指定版本的mysql,参考官方网站的文献:Docker Hub
[root@localhost ~]# docker pull mysql:5.7.37 # 指定下载MySQL的版本
🍓[查看结果]🍓
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7.37 f26e21ddd20d 2 weeks ago 450MB
mysql latest 667ee8fb158e 2 weeks ago 521MB
hello-world latest feb5d9fea6a5 6 months ago 13.3kB
daocloud.io/nginx latest 6084105296a9 13 months ago 133MB
1.4、docker ps
查看目前启动的docker容器;
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@localhost ~]# docker ps -a # -a之后,能够看到运行或者停止的docker容器,
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
668f7bfbac94 daocloud.io/nginx "/docker-entrypoint.…" 21 hours ago Exited (0) 19 hours ago fan-nginx-2
0f1c0c7fdc0d daocloud.io/nginx "/docker-entrypoint.…" 22 hours ago Exited (0) 21 hours ago fan-nginx-1
2b180d53996f hello-world "/hello" 22 hours ago Exited (0) 22 hours ago goofy_cray
# -a, --all Show all containers (default shows just running)
1.4.1、docker start
开启某个docker容器。可以+docker的id启动,也可以用docker的名字启动。
[root@localhost ~]# docker start fan-nginx-1
fan-nginx-1
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0f1c0c7fdc0d daocloud.io/nginx "/docker-entrypoint.…" 23 hours ago Up 3 seconds 0.0.0.0:8080->80/tcp, :::8080->80/tcp fan-nginx-1
1.4.2、docker stop
停止某个docker容器
[root@localhost ~]# docker stop fan-nginx-1
fan-nginx-1
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1.4.3、docker rm
注意这个要删除的容器必须是关闭的才能够删除
[root@localhost ~]# docker rm fan-nginx-1
fan-nginx-1
[root@localhost ~]# docker ps -a | grep fan-nginx
668f7bfbac94 daocloud.io/nginx "/docker-entrypoint.…" 22 hours ago Exited (0) 20 hours ago fan-nginx-2
# 这里可以看到"fan-nginx-1"已经被删除了
1.4.4、docker run
docker run = docker create + docker start
类似流程如下图:
1.4.5、docker top + 容器名字
可以查看容器里边运行了哪些命令
fmy@dockerserever:~$ sudo docker top fan-nginx-1
UID PID PPID C STIME TTY TIME CMD
root 4567 4547 0 03:03 ? 00:00:00 nginx: master process nginx -g daemon off;
systemd+ 4616 4567 0 03:03 ? 00:00:00 nginx: worker process
systemd+ 4617 4567 0 03:03 ? 00:00:00 nginx: worker process
1.5、docker logs + 容器名字
可以查看容器启动的过程中的日志,可以用来排错使用。
1.6、dokcer exec
这个命令可以进入容器里边。你可以是用"docker exec --help来看它的语法字典"
fmy@dockerserever:~$ sudo docker exec --help
[sudo] password for fmy:
Usage: docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
Run a command in a running container
Options:
-d, --detach Detached mode: run command in the background
--detach-keys string Override the key sequence for detaching a container
-e, --env list Set environment variables
--env-file list Read in a file of environment variables
-i, --interactive Keep STDIN open even if not attached
--privileged Give extended privileges to the command
-t, --tty Allocate a pseudo-TTY
-u, --user string Username or UID (format: <name|uid>[:<group|gid>])
-w, --workdir string Working directory inside the container
# -it,开启一个交互式的终端进入容器里边,运行/bin/bash
fmy@dockerserever:~$ sudo docker exec -it fan-nginx-1 /bin/bash
root@c0fe3a59a022:/#
root@c0fe3a59a022:/# hostname # dockers的主机名字,其实就是它的id
c0fe3a59a022
root@c0fe3a59a022:/# cat /etc/issue # docker的系统
Debian GNU/Linux 11 \n \l
对docker容器里边的nginx做修改
root@c0fe3a59a022:/# cd /usr/share/nginx/html
root@c0fe3a59a022:/usr/share/nginx/html# ls
50x.html index.html
root@c0fe3a59a022:/usr/share/nginx/html# echo "hello my friends " >> index.html
这里要注意,你要使用你的“IP地址 : 这个docker占用的端口号”才能够访问你自己网站。
问题:容器运行的时候是启动了一个进程,那么关掉容器再启动的时候,我们输入的"hello my friends"还会存在吗?进程是在内存中的,我们关掉之后,会不会把内容存到我们的磁盘中,再次启动的时候,是否会把磁盘中的内容加载到内存中?
答案:会的存在的。当你对容器里边的东西做了修改之后,你把容器停掉,系统会把你的修改数据保存到相关的磁盘的某个目录中去的。
1.6.1、进入容器之后,很多命令不可以使用
root@c0fe3a59a022:/# ls
bin dev docker-entrypoint.sh home lib64 mnt proc run srv tmp var
boot docker-entrypoint.d etc lib media opt root sbin sys usr
root@c0fe3a59a022:/# ip add
bash: ip: command not found
因为容器里边运行的镜像,是一个浓缩版的镜像,是一个基础的系统,有很多没有安装的程序。里边的系统跟我们外边的操作系统关系不是很大,比如,我们外边运行的是"Ubuntu",但是里边运行的是"Debian"。因为里边很多软件并没有安装,所以没有"ip add'等其他命令也很正常。若是我们需要这些命令,我们可以进行手动安装,但是建议不要这么做。因为这不符合容器的单进程思想,即一个容器里只跑一个关键的进程。
1.7、启动MySQL容器
参考国内网站:Hub · DaoCloud
参考docker官方网站: Docker Hub
1.7.1、在Ubuntu里启动MySQL
fmy@dockerserever:~$ sudo docker pull mysql:5.7.35 # 安装MySQL容器
# 若是没有指定端口号映射,那么就默认3306端口。这里没有映射所以访问不能用正常的方法。
fmy@dockerserever:~$ sudo docker run --name fan-mysql-1 -e MYSQL_ROOT_PASSWORD='f123456' -d -p 3306:3306 mysql:5.7.35 # 访问本机的3306端口就映射到容器的3306端口;-d,是放在后台运行
594962d85308743234adce2aae03d160ca558e5cbcdbb4b119a1e4d9a562fd0d
#在访问之前,我们若是我们centos或者Ubuntu系统上运行这个MySQL,需要把系统上的MySQL关闭。不然会提示端口已经被占用
fmy@dockerserever:~$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
594962d85308 mysql:5.7.35 "docker-entrypoint.s…" About a minute ago Up About a minute 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp fan-mysql-1
MySQL启动之后,要去安装一个mariadb(安装这个是为了获得MySQL命令):
Ubuntu:apt install mariadb-server(Ubuntu中安装这个,两个端都有了)
centos:yum install mariadb mariadb-server
在centos中mariadb(客户端的软件包)和 mariadb-serve(服务器的软件包,另外centos8里边不需要安装这个server的软件包)
🍓[访问MySQL]🍓
# 默认情况下连接的是文件sock,而我们docker是通过IP地址去映射的。
fmy@dockerserever:~$ sudo mysql -uroot -pf123456
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/run/mysqld/mysqld.sock' (2)
fmy@dockerserever:~$ sudo mysql -uroot -pf123456 -h 192.168.29.132 # 指定连接服务器的IP地址
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.35 MySQL Community Server (GPL)
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]>
1.7.2、在centos里启动MySQL
第一步:在宿主机上安装mariadb的客户端软件,获得MySQL命令
[root@localhost ~]# yum install mariadb
第二步: 启动MySQL容器
[root@localhost ~]# docker run --name fan-mysql-1 -e MYSQL_ROOT_PASSWORD='f123456' -d -p 3306:3306 mysql:5.7.35
17fd266ec3a6298dfc15063358270c7eaf4b008258124e0d8b50f17c3e589eca
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
17fd266ec3a6 mysql:5.7.35 "docker-entrypoint.s…" 3 minutes ago Up 3 minutes 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp fan-mysql-1
第三步:访问MySQL
你可以本机访问也可以从别的机器上访问
这是从别的机器上连接另一台机器的MySQL
若是连接本地的MySQL就不需要-h + IP地址
1.7.3、区别MySQL是宿主机的还是容器的的方法
# 这就是docker起的MySQL
root@dockerserever:/home/fmy# ss -anplut|grep 3306
tcp LISTEN 0 4096 0.0.0.0:3306 0.0.0.0:* users:(("docker-proxy",pid=5369,fd=4))
tcp LISTEN 0 4096 [::]:3306 [::]:* users:(("docker-proxy",pid=5375,fd=4))
root@dockerserever:/home/fmy# ps aux|grep mysqld
systemd+ 5410 0.0 5.0 1377308 199392 ? Ssl 06:58 0:12 mysqld
root 12203 0.0 0.0 6548 2348 pts/0 S+ 10:53 0:00 grep --color=auto mysqld
# 这就是宿主机的MySQL
[root@localhost ~]# service mariadb start
[root@localhost ~]# ps aux|grep mysqld
mysql 4411 1.0 4.3 968920 80804 ? Sl 18:58 0:00 /usr/libexec/mysqld --bas=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --log-error=/var/log/mab/mariadb.log --pid-file=/var/run/mariadb/mariadb.pid --socket=/var/lib/mysql/mysql.sock
root 4447 0.0 0.0 112824 980 pts/1 S+ 18:58 0:00 grep --color=auto mysql
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@localhost ~]# ss -anplut|grep 3306
tcp LISTEN 0 50 *:3306 *:* users:(("mysqld",pid=4411,fd=14))
1.8、docker create
root@dockerserever:/home/fmy# docker create --name nginx-yao-1 -p 7788:80 nginx
fd65ab2f6bcd176dff405dce181b4b2ebb423f3c0922004d38c27b783fb7ad36
root@dockerserever:/home/fmy# docker ps -a|grep yao
fd65ab2f6bcd nginx "/docker-entrypoint.…" 31 seconds ago Created nginx-yao-1
root@dockerserever:/home/fmy# docker start nginx-yao-1
nginx-yao-1
root@dockerserever:/home/fmy# docker ps |grep yao
fd65ab2f6bcd nginx "/docker-entrypoint.…" 2 minutes ago Up 17 seconds 0.0.0.0:7788->80/tcp, :::7788->80/tcp nginx-yao-1
1.9、docker container inspect + 容器名字
查看容器的详细信息
root@dockerserever:/home/fmy# docker container inspect nginx-yao-1
root@dockerserever:/home/fmy# docker container inspect nginx-yao-1|grep IPAddress
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.3",
"IPAddress": "172.17.0.3",
1.9.1、 为什么容器也有IP地址呢?
这些容器相当于宿主机的内网,宿主机会有一个docker0的网卡,所以会给每一个容器都分配一个内网IP地址。
root@dockerserever:/home/fmy# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:c1:d9:eb brd ff:ff:ff:ff:ff:ff
altname enp2s1
inet 192.168.29.132/24 brd 192.168.29.255 scope global dynamic ens33
valid_lft 1603sec preferred_lft 1603sec
inet6 fe80::20c:29ff:fec1:d9eb/64 scope link
valid_lft forever preferred_lft forever
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ae:e7:58:99 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80::42:aeff:fee7:5899/64 scope link
valid_lft forever preferred_lft forever
9: vethb946298@if8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default
link/ether 46:08:52:bb:70:11 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet6 fe80::4408:52ff:febb:7011/64 scope link
valid_lft forever preferred_lft forever
11: vethc7efec8@if10: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default
link/ether ea:a2:08:3b:cc:a6 brd ff:ff:ff:ff:ff:ff link-netnsid 1
inet6 fe80::e8a2:8ff:fe3b:cca6/64 scope link
valid_lft forever preferred_lft forever
1.9.2、 run一个容器的时候,加"-p"映射端口会发生一些什么变化?
会在docker的iptables规则里添加SNAT和DNAT
[root@centos7-docker ~]# docker run -it -d --name test -p 9999:90 centos/python-35-centos7 /bin/bash
ea86b5a468819752a3a6ec038bf2489e8d072a5246980f243f9d4ef17f6eafb1
[root@centos7-docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ea86b5a46881 centos/python-35-centos7 "container-entrypoin…" 5 seconds ago Up 3 seconds 8080/tcp, 0.0.0.0:9999->90/tcp, :::9999->90/tcp test
[root@centos7-docker ~]# iptables -n -t nat -L
... 这里代表一些省略的内容
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 172.17.0.0/16 0.0.0.0/0
POSTROUTING_direct all -- 0.0.0.0/0 0.0.0.0/0
POSTROUTING_ZONES_SOURCE all -- 0.0.0.0/0 0.0.0.0/0
POSTROUTING_ZONES all -- 0.0.0.0/0 0.0.0.0/0
MASQUERADE tcp -- 172.17.0.3 172.17.0.3 tcp dpt:90
Chain DOCKER (2 references)
target prot opt source destination
RETURN all -- 0.0.0.0/0 0.0.0.0/0
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:9999 to:172.17.0.3:90
...
# 这个是没有加-p的
[root@centos7-docker ~]# docker run -it -d --name test0 centos/python-35-centos7 /bin/bash
39c0d0500d14583e82062fe1a676a4f5f30e7cf65e48c1a369c74e4cdcbfffb7
1.9.3、docker容器上网的问题
在宿主机开启了路由和能够上网的前提下,容器才能够上网。
1.9.4、用docker里的centos镜像下载tree和vim命令
这个需要我们切换centos的root用户才能使用这个命令;但是这个centos/python-35-centos7这个版本不会默认就切换到root用户,但是我也不知道切换root用户的密码。
所以你们可以用"centos:7"这个镜像来运行docker容器,这个默认出来就是使用root用户,如上图。
1.10、dockers rmi + 镜像名字
删除不需要的镜像
[root@centos7-docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql latest 667ee8fb158e 2 weeks ago 521MB
redis latest bba24acba395 2 weeks ago 113MB
mysql 5.7.35 8a8a506ccfdc 6 months ago 448MB
hello-world latest feb5d9fea6a5 6 months ago 13.3kB
daocloud.io/nginx latest 6084105296a9 13 months ago 133MB
centos/python-35-centos7 latest 2db34dda8fd8 3 years ago 645MB
[root@centos7-docker ~]# docker rmi mysql:latest
Untagged: mysql:latest
Untagged: mysql@sha256:1c75ba7716c6f73fc106dacedfdcf13f934ea8c161c8b3b3e4618bcd5fbcf195
Deleted: sha256:667ee8fb158e365450fc3f09712208fe44e9f1364a9b130fed95f3f4862f8a63
Deleted: sha256:daba3b5cd1b725f259d5d59049c7011f6a20f2e7e4782b873cadeedbc1a4f122
Deleted: sha256:407a68a397de3c8e4da2ccd388f27c795519414cc9319f674e7b9a492cd8514b
Deleted: sha256:6967db79cb8031d7e505dd82c91c6426e84c6ad2098d06c1c090485886bc1c63
Deleted: sha256:3dcc0f922d11309b2e4870d5f42c5005f086c9b9c1e128ed2b712b65fa79a5c9
Deleted: sha256:ae5d4ab2734d5c27069212b2690dc2c7ac4cd85ee5e122607cb175f7fe908914
Deleted: sha256:610784bcaae50e999566928bdec7a4e146fe075d9e487bde0a228c99013ff1d9
Deleted: sha256:ccebaff04ea21a9e2df07f9d5af5c47ccd141cd3590f4d45784b6075e7c17ded
Deleted: sha256:716203221cd982fc07b80efda0c53a759ecfd69b2d93d4e8adf5fa094351372e
Deleted: sha256:fbd4939b3eb58642a07003e076acc3d0d8140797f61139ce4d3645790d9c8b51
Deleted: sha256:88f8458b4b2030b229b9757bd4061bce58b65e831a0bba8fa71aa8b3f87db630
Deleted: sha256:f2f431ab3ddc1460d300cd86016cc03b7611b56f04bd88370da3d378b3d10aea
Deleted: sha256:c1065d45b8722a4385f2ee26116e1859e8083400ee00d2beff3fdd5225bfeee9
[root@centos7-docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
redis latest bba24acba395 2 weeks ago 113MB
mysql 5.7.35 8a8a506ccfdc 6 months ago 448MB
hello-world latest feb5d9fea6a5 6 months ago 13.3kB
daocloud.io/nginx latest 6084105296a9 13 months ago 133MB
centos/python-35-centos7 latest 2db34dda8fd8 3 years ago 645MB
1.11、限制容器可以使用的cpu和内存资源
[root@centos7-docker ~]# docker run -it --cpu-shares 30 -m 100000000 -d --name test1 centos/python-35-centos7
6d30a71bc0d1d2915c9799db95821bf7614014e50d037363f6528f975bfce230
"""
--cpu-shares 30,限制使用cpu。另外不管你有多少核心,都是看做一个整体来计算,都是按照你制定的比例分配资源的。这个资源是消耗docker的资源。当你的docker里有一个容器,那么他也可以占满cpu。但是若是出现一个容器分配60的权重。那么test1最多只能消耗1/3的资源。
-m 100000000,限制使用内存 单位是byte
--memory bytes
"""
[root@centos7-docker ~]# docker container inspect test1|egrep "CpuShares|Memory"
"CpuShares": 30, # 这里是cpu
"Memory": 100000000, # 这里是内存
"KernelMemory": 0,
"KernelMemoryTCP": 0,
"MemoryReservation": 0,
"MemorySwap": 200000000,
"MemorySwappiness": null,
1.11.1 、OOM的面试问题
如何限制一个进程可以使用多少cpu和多少内存?
创建一个容器,让这个进程在容器里run,这样可以限制容器所使用的cpu和内存,从而达到限制这个进程的cpu和内存的使用
2、容器的状态
- up
- created
- exited
3、访问MySQL的方式
3.1、使用mysql.socket文件去连接
这个文件是用来连接mysqld和mysql的,是他们的桥梁。也表示着进程与进程之间的通信方式。但是文件sock只能实现同一台机器上的不同的进程之间的通信。
[root@localhost ~]# mysql -uroot -p # 若是在本机,直接使用密码登入。若是开始是直接下载且没有设置密码的,那么密码为空。
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 7
Server version: 5.5.68-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> Bye
[root@localhost ~]# cd /var/lib/mysql
[root@localhost mysql]# ls
aria_log.00000001 ibdata1 ib_logfile1 mysql.sock test
aria_log_control ib_logfile0 mysql performance_schema
# 关闭mariadb后,sock文件没有了。
[root@localhost mysql]# service mariadb stop
Redirecting to /bin/systemctl stop mariadb.service
[root@localhost mysql]# ls
aria_log.00000001 ibdata1 ib_logfile1 performance_schema
aria_log_control ib_logfile0 mysql test
[root@localhost mysql]# mysql -uroot -p
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
3.2、通过网络socket
网络socket是(ip:port);可以实现不同的机器上的不同的进程之间的通信。例如,连接MySQL的时候,若是不接端口的时候,默认的就是3306端口。
我们在192.168.29.132这个IP机器里打开docker的mysql,在192.168.29.131这个IP机器里连接132的MySQL。
[root@localhost mysql]# mysql -uroot -p -h 192.168.29.132
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.35 MySQL Community Server (GPL)
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]>
若是长时间连接不到容器里,我们需要把132这个docker里的容器重启一下。命令为:
service docker restart
3.2.1、docker服务重启
若是docker服务重启,那么docker容器不会重启,会全部关闭。
3.2.2、docker重启和清楚防火墙规则的顺序
要先清除防火墙规则,然后启动docker。因为启动docker的时候,docker会到iptables里添加自定义规则,这个规则是保障容器之间的通信和上网使用。
4、内存溢出(oom,out of memory)
正常来说,进程的内存溢出,内核就会把这个进程杀掉。
[root@centos7-docker ~]# docker container inspect test1|egrep "OomKillDisable"
"OomKillDisable": false, # 这个是false的时候,溢出的时候容器会被杀掉;当true时,溢出的时候容器会被挂起。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)