docker安装与简单使用
CentOS 7 中 Docker 的安装
Docker 软件包已经包括在默认的 CentOS-Extras 软件源里。因此想要安装 docker,只需要运行下面的 yum 命令:
[root@localhost ~]# yum install docker
查看docker版本
[root@localhost ~]# docker version Client: Version: 1.13.1 API version: 1.26 Go version: go1.10.3 Git commit: 7d71120/1.13.1 Built: Wed Mar 2 15:25:43 2022 OS/Arch: linux/amd64 Server: Version: 1.13.1 API version: 1.26 (minimum version 1.12) Go version: go1.10.3 Git commit: 7d71120/1.13.1 Built: Wed Mar 2 15:25:43 2022 OS/Arch: linux/amd64 Experimental: false
启动 Docker 服务
安装完成后,使用下面的命令来启动 docker 服务,并将其设置为开机启动:
[root@localhost ~]# systemctl start docker.service
[root@localhost ~]# systemctl enable docker.service
下载官方的 CentOS 镜像到本地
[root@localhost ~]# docker pull centos:centos7
Pulling repository centos
192178b11d36: Download complete
70441cac1ed5: Download complete
ae0c2d0bdc10: Download complete
511136ea3c5a: Download complete
5b12ef8fd570: Download complete
确认 CentOS 镜像已经被获取
[root@localhost ~]# docker images centos REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/centos latest 5d0da3dc9764 8 months ago 231 MB
运行一个 Docker 容器
过-it创建的容器,自动进入容器中,如果exit退出容器的话,容器也会自动停掉。
所以t也可以换成d,d是以守护模式运行容器,不会直接进入容器。可以通过exec进入容器,退出命令也不会关闭容器。
[root@localhost ~]# docker run -i -t centos /bin/bash
[root@6c90089b786a /]#
我们可以看到 CentOS 容器已经被启动,并且我们看到了 bash 提示符。在 docker 命令中我们使用了 “-i 捕获标准输入输出”和 “-t 分配一个终端或控制台”选项。
若要断开与容器的连接,则输入 exit。
[root@localhost ~]# docker run -i -t --name=vue_shop centos:7 /bin/bash [root@6c90089b786a /]# cat /etc/redhat-release CentOS Linux release 8.4.2105 [root@6c90089b786a /]# exit exit [root@localhost ~]#
显示当前正在运行容器的列表
[root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 027096c4ba54 centos "/bin/bash" 7 seconds ago Up 6 seconds loving_golick [root@localhost ~]#
使docker中的项目一直后台运行
Docker容器后台运行,就必须有一个前台进程.
容器运行的命令如果不是那些一直挂起的命令(比如运行top,tail),就是会自动退出的
docker容器的主线程(dockfile中CMD执行的命令)结束,容器会退出
docker exec -id [CONTAINER_NAME or CONTAINER_ID] /bin/bash
创建mysql容器
[root@localhost ~]# docker pull mysql:5.7
Trying to pull repository docker.io/library/mysql ...
5.7: Pulling from docker.io/library/mysql
c1ad9731b2c7: Pull complete
54f6eb0ee84d: Pull complete
cffcf8691bc5: Pull complete
89a783b5ac8a: Pull complete
6a8393c7be5f: Pull complete
af768d0b181e: Pull complete
810d6aaaf54a: Pull complete
81fe6daf2395: Pull complete
5ccf426818fd: Pull complete
68b838b06054: Pull complete
1b606c4f93df: Pull complete
Digest: sha256:7e99b2b8d5bca914ef31059858210f57b009c40375d647f0d4d65ecd01d6b1d5
Status: Downloaded newer image for docker.io/mysql:5.7
启动mysql容器
[root@localhost ~]# docker run mysql:5.7 2022-05-28 09:06:01+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.38-1debian10 started. 2022-05-28 09:06:01+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql' 2022-05-28 09:06:01+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.38-1debian10 started. 2022-05-28 09:06:01+00:00 [ERROR] [Entrypoint]: Database is uninitialized and password option is not specified You need to specify one of the following: - MYSQL_ROOT_PASSWORD - MYSQL_ALLOW_EMPTY_PASSWORD - MYSQL_RANDOM_ROOT_PASSWORD
显示没有设置密码,需要设置密码(docker容器名称为 vue_shop,端口号为3318,映射宿主机的3306端口,mysql版本5.7)
[root@localhost ~]# docker run -itd --name vue_shop -e MYSQL_ROOT_PASSWORD=admin1234 -p 3318:3306 mysql:5.7 e958660a0cb61f4761ae06addd28d51e1c7d11a14f25ba3f487b9ab25b88cf12
看到上面的一大串字符,说明数据库的服务已经启动,root 账号密码已更改为 admin1234
进入mysql容器并登录mysql
docker exec -it vue_shop bash
mysql -u root -p
开启数据库远程访问权限
use mysql;
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'admin1234';grant all privileges on *.* to
'root'
@
'%'
;
到此,数据库的安装完成,可以使用Navicat进行远程连接 ,连接的端口号为docker中 mysql 的端口号3318
上面的创建的容器,修改配置时需要在docker里面修改,为方便操作,我们可以在宿主机创建配置文件,在创建容器时指定使用的配置文件,后续操作可更方便
1、创建映射文件夹
mkdir -p /docker/mysql/log # 日志文件 mkdir -p /docker/mysql/data # 数据文件 mkdir -p /docker/mysql/conf # 配置文件
2、新建配置文件my.cnf,加入如下内容
vim /docker/mysql/conf/my.cnf # 新建配置文件
# 内容 [client] default_character_set=utf8 [mysqld] collation_server = utf8_general_ci character_set_server = utf8
创建并启动实例(注意容器名称不能重复,已存在时会报错):
docker run -itd --name dockerMysql --privileged=true -v /docker/mysql/log:/var/log/mysql -v /docker/mysql/data:/var/lib/mysql -v /docker/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=admin1234 -p 3333:3306 mysql:5.7
增加挂本地目录
Docker容器启动时,如果要挂载宿主机上的一个目录,可以用-v参数指定
docker run -itd --name=dockerMysql -v /usr/local/share:/usr/data centos /bin/bash
在容器启动后,容器内会自动创建/data2的目录。
-v参数中,冒号":"前面的目录是宿主机目录,后面的目录是容器内目录。
冒号”:”前后的路径必须是绝对路径,以下斜线“/”开头。
宿主机目录如果不存在,则会自动生成。
现在镜像内就可以在宿主机和docker里互相共享文件了。
docker容器的其他操作
1、创建容器并等待执行
docker create --name < container-name> < image-name>
2、运行容器
docker run --name < container-name> < image-name>
3、暂停容器
docker pause < container-id/ name>
4、取消暂停
docker unpause < container-id/ name>
5、启动容器
docker start < container- id/ name>
6、重启容器
docker restart < container- id/ name>
7、停止容器
docker stop < container- id/ name>
8、杀死容器
docker kill < container- id/ name>
9、销毁容器
docker rm < container-id/ name>
10、进入容器
docker exec -it 容器名称 /bin/bash
Ubuntu安装docker
卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc
设置仓库及安装 apt 依赖包
sudo apt-get update sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg-agent \ software-properties-common
添加 Docker 的官方 GPG 密钥:
curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 通过搜索指纹的后8个字符,验证您现在是否拥有带有指纹的密钥。
sudo apt-key fingerprint 0EBFCD88 pub rsa4096 2017-02-22 [SCEA] 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 uid [ unknown] Docker Release (CE deb) <docker@docker.com> sub rsa4096 2017-02-22 [S]
使用以下指令设置稳定版仓库
sudo add-apt-repository \ "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/ \ $(lsb_release -cs) \ stable"
安装 Docker Engine-Community
sudo apt-get install docker-ce docker-ce-cli containerd.io
安装完docker后,运行命令报docker权限问题
Got permission denied while trying to connect to the Docker daemon socket at 。。。
解决办法
sudo groupadd docker # 添加docker用户组,可能会出现 docker is exist 报错,忽略运行后面命令即可 sudo gpasswd -a $USER docker # 将登陆用户加入到docker用户组中 newgrp docker # 更新用户组,ubuntu 18.04需要重启生效